成分の2フレーム(as_view及び発送方法)DRF DRF要求のライフサイクルのフレームを、要求、解析、レンダリング、応答において、異常な、配列、ORM設定レビュー(メディアファイルの構成)、アプリケーションsettings.py INSTALLED_APPS有意レジスタ、データベースコンフィギュレーション

アプリケーションはINSTALLED_APPSに登録する必要があるかどうか

「」」    
        (このようなデータベース関連など)ではないいくつかの特別な操作アプリの使用中__init__ファイル、フォルダを登録するときに、アプリが必要とされていない場合、あなたは登録できませんが、登録後、アプリケーションはすべての機能を使用することができます
    結論:すべてのアプリケーションが登録を完了することができます
「」」

 

データベース構成(することができます設定ファイルに完成)

輸入pymysql
pymysql.install_as_MySQLdb()
DATABASES = {
     ' デフォルト' :{
         ' ENGINE '' django.db.backends.mysql ' ' NAME '' データベース名' ' USER '' 口座番号' ' PASSWORD '' パスワード' 「HOST ':'それは127.0.0.1の場合、設定は「省略でき、
         " PORT ":3306、  それが3306の場合、この設定は省略できます
    }
}

 

ORMの設定レビュー

メディアファイルの設定

models.py 
から django.db 輸入モデル
 クラスのユーザー(models.Model):
    SEX_CHOICES =((0、' M ')、(1、' F ' ))
    名前 = models.CharField(max_lengthを= 64、verbose_name = ' 姓名' 
    年齢 = models.IntegerField()
    高さ = models.DecimalField(max_digits = 5、decimal_places = 2、デフォルト= 0)
    性別 = models.IntegerField(選択肢= SEX_CHOICES、デフォルト= 0)
    性別= models.CharField(選択肢= [( '0'、 '男')、( '1'、 '女')]) 
    アイコン= models.ImageField (upload_to = ' アイコン'、デフォルト= ' アイコン/ default.png ' 
    
    
settings.py ルートフォルダははos.pathに追加され 
MEDIA_ROOTのそれos.path.join =(BASE_DIR、メディア#のURLがルート/ルート名を設定することです/ 
MEDIA_URL = /メディア/ 

メインルート上のインポート
から django.views.static インポートサーブ
 から django.conf インポート設定
 #1 マスタ経路最下 
URL(R&LT ' ?^メディア/(P <パス> *)'、サーブ、{ ' DOCUMENT_ROOT ':セッティング.MEDIA_ROOT})

 

APIViewリクエストのライフサイクル

オーバーライドメソッドas_view

「」」
ルーティング設定を行う1)as_viewの方法は、関数が返す設定は無効CSRF認証ルールであるcsrf_exempt(図)、です
結論:すべての継承されたAPIViewサブクラス、認定規則CSRF制限の対象ではありません

dispathにタスクを完了するために2)要求処理方法
「」」

 

発送方法を書き直し

「」」
3つのコアのタスクが完了しました:
1)オブジェクト処理要求:要求レンダリングモジュール

2)申請手続き処理:三認証モジュールを=>コードは、その処理を完了しました

3)結果のための要求に応答して:|モジュールをレンダリングすることに応答して、通常の応答処理例外モジュール異常応答を処理します
「」」

 

リクエスト解析モジュール

「」」
Djangoの要求オブジェクトネイティブWSGI契約の1)は、第2のパッケージとの後方互換性(オリジナルコンテンツの要求オブジェクトが現在のリクエストオブジェクトにアクセスすることができる製)

2)request.query_paramsに配置されているすべてのスプライシングパラメータは、すべてのパラメータがrequest.dataデータパケットに配置されます

3)データパケット既知未知の経路又は引数とkwargsからに格納されています
「」」

解析モジュールは、カスタムリゾルバsettings.pyに構成されてもよい 
REST_FRAMEWORK = {
     解析モジュール
    ' DEFAULT_PARSER_CLASSES ' :[
         ' rest_framework.parsers.JSONParser 'JSON 
        ' rest_framework.parsers.FormParser '#は、URLエンコード
        ' rest_framework.parsers.MultiPartParserを'   フォームデータ
    ]、
    レンダリングモジュール
    ' DEFAULT_RENDERER_CLASSES ' :[
         ' rest_framework.renderers.JSONRenderer ' 'rest_framework.renderers.BrowsableAPIRenderer "の行には、コメントをします
    、]
}

例:

rest_framework.views 輸入APIView
 から rest_framework.responseのインポート対応

から輸入モデル、シリアライザ

APIViewのライフサイクルの知識
クラスUserAPIView(APIView):
     DEF GET(セルフ、要求、* argsを、** kwargsから):
         返す(レスポンス' OKをGET ' 

    要求ハンドル
    DEF(**自己、要求、* argsを、POSTをkwargsからの):
        下位互換性:元のオブジェクトは、現在使用してオブジェクトいる
        #1 (タイプの(要求))を印刷#DRFの
        #のタイプの印刷を((request._request ))#のDjangoのネイティブWSGI

        印刷(request.GET) 
        スプライシングパラメータの
        印刷(request.query_params)

        (request.POSTの)印刷
        パケットのパラメータ
        を印刷(request.data)

        リターン・レスポンス({
             ' ステータス' :0、
             ' MSG '' OK ' ' 結果'' ポスト成功'
        })
        
コードの表示

 

応答のレンダリングモジュールで

「」」
3つの認証モジュールは、例外なく要求および表示ロジックを処理するとき1)、応答レンダリングモジュールで実行されます

レンダリングモジュールに応答して、データ2)は二つの方法でレンダリングされた完成した描画データであろう:JSONはデータ形式のレンダリング、Browerの上にレンダリングされたフォーマットデータ
「」 " 
レンダリングモジュールは、カスタムリゾルバsettings.pyに構成することができる 
REST_FRAMEWORK = {
     レンダリングモジュール
    DEFAULT_RENDERER_CLASSES :[
         rest_framework.renderers.JSONRenderer #のブラウザのレンダリングは、行にコメントします、そうでない場合は、ブラウザインターフェイスあなたを要求します言語の背景への暴露
        rest_framework.renderers.BrowsableAPIRenderer 
    ]、
}

 コードの影響に対応します:

rest_framework.viewsの輸入APIView
 から rest_framework.responseの輸入レスポンス
 クラスUserAPIView(APIView):
     デフポスト(自己、要求、* argsを、** kwargsから):
         リターン・レスポンス({
             ' ステータス' :0、
             ' MSG '' OK ' ' 結果'' ポスト成功' 
        })
コードの表示

 

シリアル化アセンブリ

シングルテーブルシリアル化されました

models.py
from django.db import models
from django.conf import settings
class User(models.Model):
    SEX_CHOICES = ((0, ''), (1, ''))
    name = models.CharField(max_length=64, verbose_name='姓名')
    password = models.CharField(max_length=64)
    age = models.IntegerField()
    height = models.DecimalField(max_digits=5, decimal_places=2, default=0)
    sex = models.IntegerField(choices=SEX_CHOICES, default=0)
    # sex = models.CharField(choices=[('0', '男'), ('1', '女')])
    icon = models.ImageField(upload_to='icon', default='icon/default.png')

    # 自定义序列化给前台的字段
    # 优点:1)可以格式化数据库原有字段的数据 2)可以对外隐藏原有数据库字段名 3)可以直接连表操作
    @property  # 制造插头
    def gender(self):
        return self.get_sex_display()

    @property
    def img(self):
        return settings.BASE_URL + settings.MEDIA_URL + self.icon.name

    def __str__(self):
        return self.name

 

serializers.py

from rest_framework import serializers
from . import models
class UserModelSerializer(serializers.ModelSerializer):
    class Meta:
        # 该序列化类是辅助于那个Model类的
        model = models.User
        # 设置参与序列化与反序列化字段
        # 插拔式:可以选择性返回给前台字段(插头都是在Model类中制造)
        # fields = ['name', 'age', 'height', 'sex', 'icon]
        fields = ['name', 'age', 'height', 'gender', 'img']

 

views.py

from rest_framework.views import APIView
from rest_framework.response import Response

from . import models, serializers

class UserAPIView(APIView):
    def get(self, request, *args, **kwargs):
        pk = kwargs.get('pk')
        if pk:  # 单查
            # 1)数据库交互拿到资源obj或资源objs
            # 2)数据序列化成可以返回给前台的json数据
            # 3)将json数据返回给前台
            obj = models.User.objects.get(pk=pk)
            serializer = serializers.UserModelSerializer(obj, many=False)
            return Response(serializer.data)

        else:  # 群查
            # 1)数据库交互拿到资源obj或资源objs
            # 2)数据序列化成可以返回给前台的json数据
            # 3)将json数据返回给前台
            queryset = models.User.objects.all()
            # many操作的数据是否是多个
            serializer = serializers.UserModelSerializer(queryset, many=True)
            return Response(serializer.data)

    def post(self, request, *args, **kwargs):
        # 单增
        # 1)从请求request中获得前台提交的数据
        # 2)将数据转换成Model对象,并完成数据库入库操作
        # 3)将入库成功的对象列化成可以返回给前台的json数据(请求与响应数据不对等:请求需要提交密码,响应一定不展示密码)
        # 4)将json数据返回给前台

        return Response()

 

小结

"""
0)回顾Django及ORM

1)APIView的生命周期
禁用csrf(√) => 请求解析模块(√) => 三大认证模块 => 自己代码处理请求 => 异常响应|正常响应渲染模块(√)

2)单表序列化:ModelSerializer
"""

 

 

 

 

おすすめ

転載: www.cnblogs.com/ludingchao/p/12329481.html