フラフープ
表1.1デザイン
-
多くの場合、メモリ内の値を変更しない:選択肢は、クロステーブルの低パフォーマンスを避けるために、形成します。
-
サブテーブル:テーブルの列が多すぎる場合は/コンテンツの多くは、サブテーブルのレベルを選択することができます
-
表の自己相関
インポートdjango.dbモデルクラスのUserInfo(models.Model): "" "ユーザーテーブル" "" ユーザ名= models.CharField(verbose_name = 'ユーザ名'、MAX_LENGTH = 32) パスワード= models.CharField(verbose_name =「パスワード'64 MAX_LENGTH =) (:クラスの記事この記事はmodels.Model)だった "" "記事一覧" "" category_choices =( アドバイス(1、 ')'、 (2'ニュース)、 (3、 'シェア' )、 (4、 'Q')、 (5 'その他') ) カテゴリ= models.IntegerField(= verbose_name '分類'の選択肢= category_choices) 表題= models.CharField(verbose_name = 'タイトル'、= 32 MAX_LENGTH) イメージ= models.CharField(= verbose_name '画像パス'、MAX_LENGTH = 128)#/メディア/アップロード/ ....
要約= models.CharField(verbose_name = '简介'、MAX_LENGTH = 255) COMMENT_COUNT = models.IntegerField(verbose_name = '评论数'、デフォルト= 0) read_count = models.IntegerField(verbose_name = '浏览数'、デフォルト= 0 ) 著者= models.ForeignKey(verbose_name = '作者'、= 'のUserInfo'への) 日付= models.DateTimeField(verbose_name = '创建时间'、auto_now_add =真)クラスArticleDetail(models.Model): 記事=モデル。 OneToOneField(verbose_name = '文章表'、= '記事'まで) コンテンツ= models.TextField(verbose_name = '内容')クラスコメント(models.Model): "" "评论表""" 記事= models.ForeignKey (verbose_name = '文章'、= '記事')への コンテンツ= models.TextField(verbose_name = '评论')
ユーザー= models.ForeignKey(verbose_name = '评论者'、= 'のUserInfo'へ)
#親= models.ForeignKey(verbose_name = '回复'、= '自己'、ヌル= Trueの場合、空白= Trueに)
1.2システムアーキテクチャ(CMS)
達成するために1.3の機能
1.3.1新しい記事(書き込むことはできません)
:2つの表にデータを増やすために一度 DEF POST(自己、要求、* argsを、** kwargsから): 「」「新しい記事(バックグラウンドでの開発を管理しなければならない)」「」 SER = ArticleSerializer(データ= request.data ) ser_detail = ArticleDetailSerializer(データ= request.data) IF ser.is_valid()とser_detail.is_valid(): #増記事 。article_object = ser.save(= AUTHOR_ID 1) ser_detail.save(=記事この記事はarticle_objectた) 応答を返す(「追加成功) 応答を返す( 『エラー』)
1.3.2記事一覧
1.3.3条詳細
1.3.4コメントリスト
-
ビューには、リストのコメントアクセス時間:
http://127.0.0.1:8000/hg/comment/?article=2
-
コメントを追加します
http://127.0.0.1:8000/hg/comment/ { 記事:1、コンテンツ: 'XXX' }
http://127.0.0.1:8000/hg/comment/?article=1 { 内容: 'XXX' }
2.スクリーニング
ケース:記事のリストでは、フィルタリング機能を付けます。
全てます:http://127.0.0.1:8000 / HG /記事/
フィルターします。http://127.0.0.1:?8000 / HG /記事/カテゴリ= 2
クラスArticleView(APIView):
"" "文章视图类""" DEF(自己、要求、* argsを、** kwargsから)を取得: "" "获取文章列表""" PK = kwargs.get( 'PK') そうでない場合、PK: 条件= {} カテゴリ= request.query_params.get( 'カテゴリー') 場合カテゴリ 条件[ 'カテゴリー'] =カテゴリ クエリセット= models.Article.objects.filter(**条件).order_by( ' -日付') ページャ= PageNumberPagination() 結果= pager.paginate_queryset(クエリセット、リクエスト、自己) SER = ArticleListSerializer(例えば=結果、多くの=真) の戻り応答(SER。データ)
article_object = models.Article.objects.filter(ID = PK)1次回()
SER = PageArticleSerializer(例えば= article_object、多くの= False)が
復帰応答(ser.data)
DRFコンポーネント:内蔵の機能をフィルタリング
django.shortcutsからレンダリングインポート
rest_framework.viewsインポートAPIViewから
rest_framework.response輸入応答から
から。インポートモデルrest_framework.filtersからインポートBaseFilterBackend クラスMyFilterBackend(BaseFilterBackend): DEF filter_queryset(自己、要求、クエリセット、ビュー): ヴァル= request.query_params.get( 'cagetory') 戻りqueryset.filter(CATEGORY_ID =ヴァル)クラスIndexView(APIView): デフのget(自己、要求、* argsを、** kwargsから): #http://www.xx.com/cx/index/ #models.News.objects.all() #http://www.xx.com/cx/index/?category=1
#models.News.objects.filter(カテゴリ= 1) #http://www.xx.com/cx/index/?category=1 #クエリセット= models.News.objects.all() #OBJ = MyFilterBackend( ) = obj.filter_queryset(要求、クエリセット、自己)#結果 #印刷(結果) リターン・レスポンス( '...')
3.ビュー
-
APIView、気持ちが機能を提供していませんでした。
-
GenericAPIView、内部的に定義された橋、:get_queryset / get_serilizer / get_page ...
-
ListAPIView、CreateAPIView、RetrieveAPIView、UpdateAPIView、DestroyAPIView
クラスTagSer(serializers.ModelSerializer):
クラスメタ:
モデル= models.Tag
フィールド= "__all__" クラスTagView(ListAPIView、CreateAPIView): クエリセット= models.Tag.objects.all() serializer_class = TagSer DEF get_serializer_class(自己) : #self.request #self.args #self.kwargs 場合self.request.method == 'GET': リターンTagSer のelif self.request.method == 'POST': リターンOtherTagSer デフperform_create(自己、シリアライザ): シリアライザ.SAVE(著者= 1)クラスTagDetailView(RetrieveAPIView、UpdateAPIView、DestroyAPIView)。
クエリセット= models.Tag.objects.all()
serializer_class = TagSer
フラフープを達成
ListAPIView、CreateAPIView、RetrieveAPIView、UpdateAPIView、DestroyAPIView
+
カスタムフックメソッド