-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
- Loading branch information
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
from django.contrib import admin | ||
|
||
# Register your models here. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
from django.apps import AppConfig | ||
|
||
|
||
class BlogConfig(AppConfig): | ||
name = 'blog' |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
# Generated by Django 2.2.3 on 2019-08-01 12:26 | ||
|
||
from django.db import migrations, models | ||
import django.db.models.deletion | ||
import django.utils.datetime_safe | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
initial = True | ||
|
||
dependencies = [ | ||
] | ||
|
||
operations = [ | ||
migrations.CreateModel( | ||
name='Category', | ||
fields=[ | ||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
('title', models.CharField(max_length=30)), | ||
('pub_date', models.DateTimeField(default=django.utils.datetime_safe.datetime.now)), | ||
], | ||
), | ||
migrations.CreateModel( | ||
name='Post', | ||
fields=[ | ||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
('title', models.CharField(max_length=30)), | ||
('description', models.TextField()), | ||
('post_image', models.ImageField(default='pic_folder/None/no-img.jpg', upload_to='pic_folder/')), | ||
('pub_date', models.DateTimeField(default=django.utils.datetime_safe.datetime.now)), | ||
('category', models.ManyToManyField(to='blog.Category')), | ||
], | ||
), | ||
migrations.CreateModel( | ||
name='Comments', | ||
fields=[ | ||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
('text', models.CharField(max_length=500)), | ||
('pub_date', models.DateTimeField(default=django.utils.datetime_safe.datetime.now)), | ||
('post', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='blog.Post')), | ||
], | ||
options={ | ||
'get_latest_by': 'pub_date', | ||
}, | ||
), | ||
] |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
from django.db import models | ||
|
||
# Create your models here. | ||
from django.utils.datetime_safe import datetime | ||
|
||
|
||
class Category(models.Model): | ||
title = models.CharField(max_length=30) | ||
pub_date = models.DateTimeField(default=datetime.now) | ||
|
||
def __str__(self): | ||
return self.title | ||
|
||
|
||
class Post(models.Model): | ||
title = models.CharField(max_length=30) | ||
description = models.TextField() | ||
category = models.ManyToManyField(Category) | ||
post_image = models.ImageField(upload_to='pic_folder/', default='pic_folder/None/no-img.jpg') | ||
pub_date = models.DateTimeField(default=datetime.now) | ||
|
||
def __str__(self): | ||
return self.title | ||
|
||
|
||
class Comments(models.Model): | ||
post = models.ForeignKey(Post, on_delete=models.CASCADE) | ||
text = models.CharField(max_length=500) | ||
pub_date = models.DateTimeField(default=datetime.now) | ||
|
||
class Meta: | ||
get_latest_by = 'pub_date' | ||
|
||
def __str__(self): | ||
return self.text |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
from rest_framework import serializers | ||
from .models import * | ||
|
||
|
||
class CategorySerializer(serializers.ModelSerializer): | ||
# posts = serializers.PrimaryKeyRelatedField(many=True, read_only=True) | ||
|
||
class Meta: | ||
model = Category | ||
fields = '__all__' | ||
depth = 1 | ||
|
||
|
||
class PostSerializer(serializers.ModelSerializer): | ||
# category = CategorySerializer(required=True, many=True) | ||
|
||
class Meta: | ||
model = Post | ||
fields = '__all__' | ||
# depth = 1 | ||
category = serializers.PrimaryKeyRelatedField(many=True, queryset=Category.objects.all()) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
from django.test import TestCase | ||
|
||
# Create your tests here. | ||
from rest_framework import status | ||
from rest_framework.reverse import reverse | ||
from rest_framework.test import APITestCase | ||
from .models import Post, Category, Comments | ||
from django.utils.datetime_safe import datetime | ||
from django.core.files.uploadedfile import SimpleUploadedFile | ||
import tempfile | ||
|
||
|
||
def create_category(title): | ||
return Category.objects.create(title=title).id | ||
|
||
|
||
class PostTests(APITestCase): | ||
|
||
def test_create_account(self): | ||
""" | ||
Ensure we can create a new account object. | ||
""" | ||
url = reverse('posts') | ||
cats = [create_category('dasdas1'), create_category('dasdas2'), create_category('dasdas3')] | ||
|
||
data = { | ||
'title': 'DabApps', | ||
'description': 'this is a post', | ||
# 'post_image': SimpleUploadedFile("file.mp4", b"file_content", content_type="video/mp4"), | ||
'category': cats, | ||
'pub_date': datetime.now() | ||
} | ||
response = self.client.post(url, data, format='json') | ||
self.assertEqual(response.status_code, status.HTTP_201_CREATED) | ||
self.assertEqual(Post.objects.count(), 1) | ||
self.assertEqual(Post.objects.get().title, 'DabApps') |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
from django.urls import path | ||
from rest_framework.urlpatterns import format_suffix_patterns | ||
from blog import views | ||
|
||
urlpatterns = [ | ||
path('posts/', views.PostList.as_view(), name='posts'), | ||
path('categories/', views.CategoryList.as_view(), name='categories'), | ||
|
||
# path('snippets/<int:pk>/', views.SnippetDetail.as_view()), | ||
] | ||
|
||
urlpatterns = format_suffix_patterns(urlpatterns) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
from django.shortcuts import render | ||
from rest_framework import generics | ||
|
||
# Create your views here. | ||
from blog.models import Post, Category | ||
from blog.serializers import PostSerializer, CategorySerializer | ||
|
||
|
||
class PostList(generics.ListCreateAPIView): | ||
queryset = Post.objects.all() | ||
serializer_class = PostSerializer | ||
|
||
|
||
class CategoryList(generics.ListCreateAPIView): | ||
queryset = Category.objects.all() | ||
serializer_class = CategorySerializer |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
#!/usr/bin/env python | ||
"""Django's command-line utility for administrative tasks.""" | ||
import os | ||
import sys | ||
|
||
|
||
def main(): | ||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tutorial.settings') | ||
try: | ||
from django.core.management import execute_from_command_line | ||
except ImportError as exc: | ||
raise ImportError( | ||
"Couldn't import Django. Are you sure it's installed and " | ||
"available on your PYTHONPATH environment variable? Did you " | ||
"forget to activate a virtual environment?" | ||
) from exc | ||
execute_from_command_line(sys.argv) | ||
|
||
|
||
if __name__ == '__main__': | ||
main() |