0
点赞
收藏
分享

微信扫一扫

17Django-文章发布

infgrad 2022-07-13 阅读 30

1创建应用

D:\PycharmProjects\linuxTangblog>python manage.py startapp topic

2添加应用:

INSTALLED_APPS = [
'topic',
]

3编写模型类:

from django.db import models
from user.models import UserProfile
# Create your models here.
class Topic(models.Model):
title = models.CharField(max_length=50,verbose_name="文章标题")
category = models.CharField(max_length=20, verbose_name="文章分类")
limit = models.CharField(max_length=20,verbose_name="文章权限")
introduce = models.CharField(max_length=90,verbose_name="文章简介")
content = models.TextField(verbose_name="文章内容")
create_time = models.DateTimeField(auto_now_add=True,verbose_name="创建时间")
update_time = models.DateTimeField(auto_now=True,verbose_name="更新时间")
author = models.ForeignKey(UserProfile,on_delete=models.CASCADE,verbose_name="文章关联用户的外键")

4同步数据库:

D:\PycharmProjects\linuxTangblog>python manage.py makemigrations
D:\PycharmProjects\linuxTangblog>python manage.py migrate

5定义主路由:

urlpatterns = [
path('admin/', admin.site.urls),
path('v1/topics/',include('topic.urls')),
]

6定义子路由:

from django.urls import path
from . import views
urlpatterns = [
path('<str:username>',views.TopicViews.as_view())
]

7编写文章发布逻辑:

import json

from django.http import JsonResponse
from django.shortcuts import render
from django.views import View
from django.utils.decorators import method_decorator
from tools.logging_dec import logging_check
from .models import Topic
# Create your views here.
#发表文章

class TopicViews(View):

@method_decorator(logging_check) #把自定义的方法装饰器转换成类方法可以使用的类装饰器
def post(self,request,username):
# 拿到当前登录的用户
username = request.myuser
#取出前端传过来的数据
json_str = request.body
#把json串转换成字典
json_obj = json.loads(json_str)
#从字典里取数据
title = json_obj.get('title')
content = json_obj.get('content')
content_text = json_obj.get('content_text')
introduce = content_text[:30] #截取简介
limit = json_obj.get('limit')
category = json_obj.get('category')
#对文章权限进行判断,防止外部垃圾
if limit not in ['public','private']:
result = {'code':10300,'error':'文章权限关键字非法'}
return JsonResponse(result)
#对文章分类做判断,也是为了安全
if category not in ['python','linux']:
result = {'code': 10301, 'error': '文章分类关键字非法'}
return JsonResponse(result)
#创建文章发布数据
Topic.objects.create(title=title,content=content,limit=limit,category=category,introduce=introduce,author=username)

return JsonResponse({'code':200})

 



举报

相关推荐

0 条评论