{"id":797,"date":"2021-07-12T19:26:28","date_gmt":"2021-07-12T10:26:28","guid":{"rendered":"http:\/\/www.agile-software.site\/?p=797"},"modified":"2021-09-07T06:49:20","modified_gmt":"2021-09-06T21:49:20","slug":"djangonextjs","status":"publish","type":"post","link":"https:\/\/agile-software.net\/?p=797","title":{"rendered":"Django REST Framework [\u30d6\u30ed\u30b0]"},"content":{"rendered":"\n<p>\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306f Django REST Framework \u3092\u4f7f\u7528\u3057\u3066 API \u30b5\u30fc\u30d0\u30fc\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306f Next.js \u3068 TailwindCSS \u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">requirements.txt<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"requirements.txt\"><code>Django~=3.1.7\ndjango-cors-headers~=3.4.0\ndjangorestframework~=3.11.1\nPillow==8.1.2<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">settings.py<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"mysite\/settings.py\"><code>import os   \n\n &#39;app&#39;, # \u8ffd\u52a0\n    &#39;rest_framework&#39;, \n    &#39;corsheaders&#39;,\n\n# MIDDLEWARE\u306b\u8ffd\u52a0\n&#39;corsheaders.middleware.CorsMiddleware&#39;,\n\n# \u8ffd\u52a0 localhost:3000\u304b\u3089\u306e\u30a2\u30af\u30bb\u30b9\u3092\u8a31\u53ef\u3057\u307e\u3059\nCORS_ORIGIN_WHITELIST = [\n    &quot;http:\/\/localhost:3000&quot;,\n]\n\nLANGUAGE_CODE = &#39;ja&#39;\n\nTIME_ZONE = &#39;Asia\/Tokyo&#39;\n\n\nMEDIA_URL = &#39;\/media\/&#39;\nMEDIA_ROOT = os.path.join(BASE_DIR, &#39;media&#39;)<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u4f5c\u6210<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>python3 manage.py startapp app<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u7ba1\u7406\u30e6\u30fc\u30b6\u30fc\u4f5c\u6210<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>python3 manage.py createsuperuser<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u30e2\u30c7\u30eb\u4f5c\u6210<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"app\/models.py\"><code>from django.db import models\n\n\nclass Post(models.Model):\n    title = models.CharField(&#39;\u30bf\u30a4\u30c8\u30eb&#39;, max_length=50)\n    image = models.ImageField(upload_to=&#39;images&#39;, verbose_name=&#39;\u30a4\u30e1\u30fc\u30b8\u753b\u50cf&#39;)\n    content = models.TextField(&#39;\u672c\u6587&#39;)\n    created_at = models.DateTimeField(&#39;\u4f5c\u6210\u65e5&#39;, auto_now_add=True)\n\n    def __str__(self):\n        return self.title<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u7ba1\u7406\u753b\u9762<\/h2>\n\n\n\n<p>Post \u30e2\u30c7\u30eb\u3092\u7ba1\u7406\u753b\u9762\u3067\u64cd\u4f5c\u3067\u304d\u308b\u3088\u3046\u306bPost\u30e2\u30c7\u30eb\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>from django.contrib import admin\nfrom .models import Post\n\nadmin.site.register(Post)<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>(myvenv) ~$ python3 manage.py makemigrations\n(myvenv) ~$ python3 manage.py migrate<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u8a2d\u5b9a<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/h3>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"mysite\/urls.py\"><code>from django.contrib import admin\nfrom django.urls import path, include\n\nfrom django.conf.urls.static import static\nfrom django.conf import settings\n\nurlpatterns = [\n    path(&#39;admin\/&#39;, admin.site.urls),\n    path(&#39;api\/&#39;, include(&#39;app.urls&#39;)),\n]\n\nif settings.DEBUG:\n    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/h3>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"app\/urls.py\"><code>from django.urls import path\nfrom app import views\n\n\nurlpatterns = [\n    path(&#39;post\/&#39;, views.PostView.as_view(), name=&#39;post&#39;),\n    path(&#39;post\/&lt;str:pk&gt;\/&#39;, views.PostDetailView.as_view(), name=&#39;post-detail&#39;),\n]<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">serializers.py<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>from rest_framework import serializers\nfrom .models import Post\n\n\nclass PostSerializer(serializers.ModelSerializer):\n    created_at = serializers.DateTimeField(format=&quot;%Y-%m-%d %H:%M&quot;)\n\n    class Meta:\n        model = Post\n        fields = (&#39;id&#39;, &#39;title&#39;, &#39;image&#39;, &#39;content&#39;, &#39;created_at&#39;)\n<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">views<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>from rest_framework import generics\nfrom .serializers import PostSerializer\nfrom .models import Post\n\n\nclass PostView(generics.ListAPIView):\n    queryset = Post.objects.all()\n    serializer_class = PostSerializer\n\n\nclass PostDetailView(generics.RetrieveAPIView):\n    queryset = Post.objects.all()\n    serializer_class = PostSerializer<\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306f Django REST Framework \u3092\u4f7f\u7528\u3057\u3066 API \u30b5\u30fc\u30d0\u30fc\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002 \u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306f Next.js \u3068 TailwindCSS \u3092\u4f7f\u7528\u3057\u307e\u3059\u3002 requirements.txt se<\/p>\n","protected":false},"author":1,"featured_media":1724,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jin_ogp_image_url":"","_jin_last_featured_id":0,"footnotes":""},"categories":[39],"tags":[],"class_list":["post-797","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-django-rest-framework"],"_links":{"self":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts\/797","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=797"}],"version-history":[{"count":4,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts\/797\/revisions"}],"predecessor-version":[{"id":1742,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts\/797\/revisions\/1742"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/media\/1724"}],"wp:attachment":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}