DRFフラフープ

フラフープ

表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 
+
カスタムフックメソッド

 

おすすめ

転載: www.cnblogs.com/YZL2333/p/11900694.html