{"id":5900,"date":"2022-04-03T13:19:48","date_gmt":"2022-04-03T05:19:48","guid":{"rendered":"https:\/\/egonlin.com\/?p=5900"},"modified":"2022-04-03T13:19:48","modified_gmt":"2022-04-03T05:19:48","slug":"02-01-%e8%af%b7%e6%b1%82%e6%a8%a1%e5%9d%97","status":"publish","type":"post","link":"https:\/\/egonlin.com\/?p=5900","title":{"rendered":"02-01 \u8bf7\u6c42\u6a21\u5757"},"content":{"rendered":"<h1>\u8bf7\u6c42\u6a21\u5757<\/h1>\n<h2>1\u3001CBV\u6e90\u7801\u5206\u6790<\/h2>\n<pre><code class=\"language-python\"># \u89c6\u56fe\u5c42\nfrom django.shortcuts import render, HttpResponse\nfrom django.views import View\nclass CBVTest(View):\n    # \u901a\u8fc7\u8c03\u5ea6(dispatch)\u5206\u53d1\u8bf7\u6c42\n    def dispatch(self, request, *args, **kwargs):\n        pass\n        super().dispatch(request, *args, **kwargs)\n        pass\n\n    def get(self, request):\n        return render(request, &#039;cbv.html&#039;)\n\n    def post(self, request):\n        return HttpResponse(&#039;cbv post method&#039;)<\/code><\/pre>\n<pre><code class=\"language-html\">&lt;!-- \u6a21\u677f\u5c42 --&gt;\n&lt;form action=&quot;\/cbv\/&quot; method=&quot;post&quot;&gt;\n    {% csrf_token %}\n    &lt;input type=&quot;text&quot; name=&quot;usr&quot;&gt;\n    &lt;button type=&quot;submit&quot;&gt;\u63d0\u4ea4&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<pre><code class=\"language-python\"># \u8def\u7531\u5c42\nfrom app import views\nurlpatterns = [\n    url(r&#039;^cbv\/&#039;, views.CBVTest.as_view()),\n]<\/code><\/pre>\n<h2>2\u3001drf\u5b89\u88c5\u4e0e\u4f7f\u7528<\/h2>\n<pre><code class=\"language-python\"># 1\uff09\u5b89\u88c5drf\uff1apip3 install djangorestframework\n# 2\uff09settings.py\u6ce8\u518capp\uff1aINSTALLED_APPS = [..., &#039;rest_framework&#039;]\n# 3\uff09\u57fa\u4e8ecbv\u5b8c\u6210\u6ee1\u8db3RSSTful\u89c4\u8303\u7684\u63a5\u53e3<\/code><\/pre>\n<pre><code class=\"language-python\"># \u89c6\u56fe\u5c42\nfrom rest_framework.views import APIView\nfrom rest_framework.response import Response\nuser_list = [{&#039;id&#039;: 1, &#039;name&#039;: &#039;Bob&#039;}, {&#039;id&#039;: 2, &#039;name&#039;: &#039;Tom&#039;}]\nclass Users(APIView):\n    def get(self, request, *args, **kwargs):\n        return Response({\n            &#039;status&#039;: 0,\n            &#039;msg&#039;: &#039;ok&#039;,\n            &#039;results&#039;: user_list\n        })\n    def post(self, request, *args, **kwargs):\n        # request\u5bf9formdata\uff0curlencoded\uff0cjson\u4e09\u4e2a\u683c\u5f0f\u53c2\u6570\u5747\u80fd\u89e3\u6790\n        name = request.data.get(&#039;name&#039;)\n        id = len(user_list) + 1\n        user = {&#039;id&#039;: id, &#039;name&#039;: name}\n        user_list.append(user)\n        return Response({\n            &#039;status&#039;: &#039;0&#039;,\n            &#039;msg&#039;: &#039;ok&#039;,\n            &#039;results&#039;: user\n        })<\/code><\/pre>\n<pre><code class=\"language-python\"># \u8def\u7531\u5c42\nfrom app import views\nurlpatterns = [\n    url(r&#039;^users\/&#039;, views.Users.as_view()),\n]<\/code><\/pre>\n<h2>3\u3001request\u6e90\u7801\u5206\u6790<\/h2>\n<pre><code class=\"language-python\"># as_view()\n    # \u6838\u5fc3\u8d70\u4e86\u7236\u7c7bas_view\n    view = super(APIView, cls).as_view(**initkwargs)\n    # \u8fd4\u56de\u7684\u662f\u5c40\u90e8\u7981\u7528csrf\u8ba4\u8bc1\u7684view\u89c6\u56fe\u51fd\u6570\n    return csrf_exempt(view)\n\n# dispatch(self, request, *args, **kwargs)\n    # \u4e8c\u6b21\u5c01\u88c5request\u5bf9\u8c61\n    request = self.initialize_request(request, *args, **kwargs)\n    # \u81ea\u5b9a\u4e49request\u89c4\u5219\n    self.initial(request, *args, **kwargs)\n\n# initialize_request(self, request, *args, **kwargs)\n    # \u539f\u751frequest\u5c01\u88c5\u5728request._request\n\n# initial(self, request, *args, **kwargs)\n    # \u8ba4\u8bc1\n    self.perform_authentication(request)\n    # \u6743\u9650\n    self.check_permissions(request)\n    # \u9891\u7387\n    self.check_throttles(request)<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u8bf7\u6c42\u6a21\u5757 1\u3001CBV\u6e90\u7801\u5206\u6790 # \u89c6\u56fe\u5c42 from django.shortcuts import rende [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[394,400],"tags":[],"_links":{"self":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/5900"}],"collection":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5900"}],"version-history":[{"count":0,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/5900\/revisions"}],"wp:attachment":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5900"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5900"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5900"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}