虛擬環境新建項目 rest framework
阿新 • • 發佈:2018-08-02
事情 detail response war pes setting .sh shortcut art
新建文件夾 mkdir project1 cd project1 新建虛擬環境 virtualevn env cd到project1的bin裏 激活虛擬環境 source activate 在虛擬環境中安裝依賴 pip install django==1.11.11 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install djangorestframework
序列化
serializers只做一件事情,json化model對象
首先在app01創建一個serializers.py來編寫序列化相關的代碼:
from app01.models import Comment,Article,Schoolfrom rest_framework import serializers from rest_framework.validators import ValidationError class CommentSerializer(serializers.ModelSerializer):
#相當於form組件的勾子 def validate_content(self,value): if ‘草‘ in value: raise ValidationError(‘不符合社會主義核心價值觀‘) else:return value class Meta: model = Comment fields = ‘__all__‘,所有字段 extra_kwargs = { ‘content‘:{ ‘error_message‘:{ ‘required‘:‘內容不能為空‘, } } } class ArticleModelSerializer(serializers.ModelSerializer):class Meta: model = Article fields = ‘__all__‘ #HyperlinkedModelSerializer:建立超鏈接關系 class ArticleHyperLinkedSerializer(serializers.HyperlinkedModelSerializer): school = serializers.HyperlinkedModelSerializer(view_name=‘school_detail1111‘, lookup_url_kwarg=‘id‘) class Meta: model = Article fields = {‘id‘,‘title‘,‘type‘,‘school‘} class SchoolSerializer(serializers.ModelSerializer): class Meta: model = School fields = ‘__all__‘
編寫視圖文件views.py
from django.shortcuts import render,HttpResponse from django.http import JsonResponse from app01 import models from django import views from rest_framework import serializers from rest_framework.views import APIView from rest_framework.response import Response from app01 import serializers as app01_serializers # Create your views here. class Comment(APIView): def get(self,request): res = {‘code‘:0} # 數據 all_comment = models.Comment.objects.all() #序列化 ser_obj = app01_serializers.CommentSerializer(all_comment,many=True) res[‘data‘] = ser_obj.data return Response(res) def post(self,request): res = {‘code‘:0} # 去提交的數據 comment_data = self.request.data # 對用戶提交的數據做校驗 ser_obj = app01_serializers.CommentSerializer(data=comment_data) if ser_obj.is_valid(): ser_obj.save() # 表示數據沒問題可以創建 else: # 表示數據有問題 res[‘code‘] = 1 res[‘error‘] = ser_obj.errors return HttpResponse(‘創建新評論‘) def put(self,request): # rest framework封裝好的request print(self,request) print(self.request.data) return HttpResponse(‘修改評論‘) def delete(self,request): print(self.request) print(self.request.data) return HttpResponse(‘刪除評論‘) # 文章CBV class Article(APIView): def get(self,request): res = {‘code‘:0} all_article = models.Article.objects.all() ser_obj = app01_serializers.ArticleHyperLinkedSerializer( all_article,many=True,context={‘request‘:request} ) res[‘data‘] = ser_obj.data return Response(res) def post(self,request): res = {‘code‘:0} ser_obj = app01_serializers.ArticleHyperLinkedSerializer( data=self.request.data) if ser_obj.is_valid(): ser_obj.save() else: res[‘code‘] = 1 res[‘error‘]=ser_obj.errors return Response(res) class ArticleDetail(APIView): def get(self,request,pk): res = {‘code‘:0} article_obj = models.Article.objects.filter(pk=pk).first() # 序列化 ser_obj = app01_serializers.ArticleHyperLinkedSerializer(article_obj,context={‘request‘:request}) res[‘data‘]=ser_obj.data return Response(res) class SchoolDetail(APIView): def get(self,request,id): res = {‘code‘:0} school_obj = models.School.objects.filter(pk=id).first() ser_obj = app01_serializers.SchoolSerializer(school_obj,context={‘request‘:request}) res[‘data‘] = ser_obj.data return Response(res)
app01/urls.py
from django.conf.urls import url from app01 import views urlpatterns = [ url(r‘article/‘, views.Article.as_view()), url(r‘article/(?P<pk>\d+)‘, views.ArticleDetail.as_view(), name=‘article-detail‘), url(r‘school/(?P<id>\d+)‘, views.SchoolDetail.as_view(), name=‘school-detail111‘), # 評論 # url(r‘comment_list/‘, ), # url(r‘add_comment/‘, ), # url(r‘delete_comment/‘, ), # url(r‘edit_comment/‘, ), url(r‘comment/‘, views.Comment.as_view()), ]
settings.py
INSTALLED_APPS = [ ‘django.contrib.admin‘, ‘django.contrib.auth‘, ‘django.contrib.contenttypes‘, ‘django.contrib.sessions‘, ‘django.contrib.messages‘, ‘django.contrib.staticfiles‘, ‘app01.apps.App01Config‘, ‘rest_framework‘ ]
虛擬環境新建項目 rest framework