アプリケーションは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の場合、この設定は省略できます } }
#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})
「」」 ルーティング設定を行う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 ' 、 ' 結果':' ポスト成功' })
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
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']
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 """