1. 程式人生 > >虛擬環境新建項目 rest framework

虛擬環境新建項目 rest framework

事情 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,School
from 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(rarticle/, views.Article.as_view()),
    url(rarticle/(?P<pk>\d+), views.ArticleDetail.as_view(), name=article-detail),
    url(rschool/(?P<id>\d+), views.SchoolDetail.as_view(), name=school-detail111),

    # 評論
    # url(rcomment_list/, ),
    # url(radd_comment/, ),
    # url(rdelete_comment/, ),
    # url(redit_comment/, ),
    url(rcomment/, 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