多人博客项目构建过程(三)

时间:2019-08-29
本文章向大家介绍多人博客项目构建过程(三),主要包括多人博客项目构建过程(三)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

博文相关接口

功能分析

创建博文应用

模型

#在post/models.py中
from django.db import models
from user.models import User
# Create your models here.
class Post(models.Model):
    class Meta:
        db_table = 'post'
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=256,null=False)
    postdate = models.DateTimeField(null=False)
    author = models.ForeignKey(User)#指定外键,migrate会生成author_id字段
    # self.content可以访问Content实例,其内容是self.content.content

    def __repr__(self):
        return '<Post {} {} {} {}>'.format(
            self.id,self.title,self.author,self.content
            #同上 self.id,self.title,self.author_id,self.content
        )

    __str__ = __repr__

#MySQL 表的一对一、一对多、多对多问题参考:https://www.cnblogs.com/Camiluo/p/10615065.html
class Content(models.Model):
    class Meta:
        db_table = 'content'
    #没有主键,会自动创建一个自增主键
    post = models.OneToOneField(Post,to_field=id)#一对一,这边会有一个外键引用post中的主键id,可省略不写
    content = models.TextField(null=False)

    def __repr__(self):
        return '<Content {} {}>'.format(self.post.id,self.content[:20])

    __str__ = __repr__

路由

全局设置

#在blog/urls.py中
from django.conf.urls import include
urlpatterns = [
    url(r'^$', admin.site.urls),
    url(r'^admin/', admin.site.urls),
    url(r'^index/',index),
    # url(r'^testfor/',testfor),
    url(r'^user/',include('user.urls'))#多级路由
    url(r'^post/',include('post.urls'))#多级路由
]
#post/urls.py
from django.conf.urls import url
from .views import pub,get,getall#,testMiddle


urlpatterns = [
    url(r'^pub',pub),
    url(r'^(\d+)$',get),#给get传入一个参数str类型
    url(r'^$',getall),
]

pub接口实现

#post/urls.py
from django.http import HttpRequest,HttpResponse,JsonResponse
from django.http import HttpResponseBadRequest,HttpResponseNotFound
from user.views import authenticate
from user.models import User
import simplejson
import datetime
from .models import Post,Content

# Create your views here.
@authenticate
def pub(request:HttpRequest):
    post = Post()
    content = Content()
    try:
        payload = simplejson.loads(request.body)
        post.title = payload['title']
        # post.author = User(id=request.user.id)#user是在验证身份的时候注入的
        post.author = request.user #user是在验证身份的时候注入的
        post.postdate = datetime.datetime.now(
            datetime.timezone(datetime.timedelta(hours=8))
        )
        post.save()#获取一个post id

        content.content = payload['content']
        content.post = post#

        content.save()

        return JsonResponse({
            'post_id':post.id
        })
    except Exception as e:
        print(e)
        return HttpResponseBadRequest()

get接口实现

待续。。。

原文地址:https://www.cnblogs.com/xiaoshayu520ly/p/11432545.html