17Django-文章发布
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})

浙公网安备 33010602011771号