Skip to content

Commit 88ab402

Browse files
Rest API Basics Break #1
1 parent 004b8b0 commit 88ab402

File tree

10 files changed

+101
-3
lines changed

10 files changed

+101
-3
lines changed

‎src/cfehome/urls.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@
1313
1. Import the include() function: from django.conf.urls import url, include
1414
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
1515
"""
16-
from django.conf.urls import url
16+
from django.conf.urls import url, include
1717
from django.contrib import admin
1818

1919
urlpatterns = [
2020
url(r'^admin/', admin.site.urls),
21+
url(r'^api/postings/', include('postings.api.urls', namespace='api-postings')),
2122
]

‎src/db.sqlite3

124 KB
Binary file not shown.

‎src/postings/admin.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
from django.contrib import admin
22

3-
# Register your models here.
3+
4+
from .models import BlogPost
5+
6+
admin.site.register(BlogPost)

‎src/postings/api/__init__.py

Whitespace-only changes.

‎src/postings/api/notes.md

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
1. API Endpoint(s) uri (url)
2+
- Retrieve Update Delete
3+
- Create & List & Search
4+
5+
2. HTTP methods
6+
- GET, POST, PUT, , DELETE
7+
8+
3. Data Types & Validation
9+
- JSON -> Serializer
10+
- Validation -> Serializer

‎src/postings/api/serializers.py

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from rest_framework import serializers
2+
3+
from postings.models import BlogPost
4+
5+
6+
class BlogPostSerializer(serializers.ModelSerializer): # forms.ModelForm
7+
class Meta:
8+
model = BlogPost
9+
fields = [
10+
'pk',
11+
'user',
12+
'title',
13+
'content',
14+
'timestamp',
15+
]
16+
17+
# converts to JSON
18+
# validations for data passed

‎src/postings/api/urls.py

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from django.conf.urls import url
2+
3+
4+
from .views import BlogPostRudView
5+
urlpatterns = [
6+
url(r'^(?P<pk>\d+)/$', BlogPostRudView.as_view(), name='post-rud')
7+
]

‎src/postings/api/views.py

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# generic
2+
3+
4+
from rest_framework import generics
5+
6+
from postings.models import BlogPost
7+
from .serializers import BlogPostSerializer
8+
9+
class BlogPostRudView(generics.RetrieveUpdateDestroyAPIView): # DetailView CreateView FormView
10+
lookup_field = 'pk' # slug, id # url(r'?P<pk>\d+')
11+
serializer_class = BlogPostSerializer
12+
#queryset = BlogPost.objects.all()
13+
14+
def get_queryset(self):
15+
return BlogPost.objects.all()
16+
17+
# def get_object(self):
18+
# pk = self.kwargs.get("pk")
19+
# return BlogPost.objects.get(pk=pk)
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.11.8 on 2017-12-19 22:13
3+
from __future__ import unicode_literals
4+
5+
from django.conf import settings
6+
from django.db import migrations, models
7+
import django.db.models.deletion
8+
9+
10+
class Migration(migrations.Migration):
11+
12+
initial = True
13+
14+
dependencies = [
15+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
16+
]
17+
18+
operations = [
19+
migrations.CreateModel(
20+
name='BlogPost',
21+
fields=[
22+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
23+
('title', models.CharField(blank=True, max_length=120, null=True)),
24+
('content', models.TextField(blank=True, max_length=120, null=True)),
25+
('timestamp', models.DateTimeField(auto_now_add=True)),
26+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
27+
],
28+
),
29+
]

‎src/postings/models.py

+12-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
from django.conf import settings
12
from django.db import models
23

3-
# Create your models here.
4+
5+
6+
class BlogPost(models.Model):
7+
# pk aka id --> numbers
8+
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
9+
title = models.CharField(max_length=120, null=True, blank=True)
10+
content = models.TextField(max_length=120, null=True, blank=True)
11+
timestamp = models.DateTimeField(auto_now_add=True)
12+
13+
def __str__(self):
14+
return str(self.user.username)

0 commit comments

Comments
 (0)