{"id":541,"date":"2021-04-30T07:33:34","date_gmt":"2021-04-29T22:33:34","guid":{"rendered":"http:\/\/www.agile-software.site\/?p=541"},"modified":"2021-05-05T19:39:46","modified_gmt":"2021-05-05T10:39:46","slug":"%e4%ba%88%e7%b4%84%e3%82%b5%e3%82%a4%e3%83%88%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0","status":"publish","type":"post","link":"https:\/\/agile-software.net\/?p=541","title":{"rendered":"\u4e88\u7d04\u30b5\u30a4\u30c8\u30b7\u30b9\u30c6\u30e0"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u6559\u6750\u4e00\u89a7<\/h2>\n\n\n\n<div class=\"wp-block-jin-gb-block-box-with-headline kaisetsu-box1\"><div class=\"kaisetsu-box1-title\">models.py\u306e\u4f5c\u6210<\/div>\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>class Work(models.Model):\n    title = models.CharField(&#39;\u30bf\u30a4\u30c8\u30eb&#39;, max_length=100)\n    image = models.ImageField(upload_to=&#39;images&#39;, verbose_name=&#39;\u30a4\u30e1\u30fc\u30b8\u753b\u50cf&#39;)\n    thumbnail = models.ImageField(upload_to=&#39;images&#39;, verbose_name=&#39;\u30b5\u30e0\u30cd\u30a4\u30eb&#39;, null=True, blank=True)\n    skill = models.CharField(&#39;\u30b9\u30ad\u30eb&#39;, max_length=100)\n    url = models.CharField(&#39;URL&#39;, max_length=100, null=True, blank=True)\n    created = models.DateField(&#39;\u4f5c\u6210\u65e5\u6642&#39;)\n    description = models.TextField(&#39;\u8aac\u660e&#39;)\n\n    def __str__(self):\n        return self.title<\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u30e2\u30c7\u30eb<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u30ab\u30b9\u30bf\u30e0\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3<a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/topics\/auth\/customizing\/#custom-users-and-permissions\">\u00b6<\/a><\/h3>\n\n\n\n<p>Django \u306e\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u30ab\u30b9\u30bf\u30e0\u306e\u30e6\u30fc\u30b6\u30fc\u30e2\u30c7\u30eb\u306b\u7c21\u5358\u306b\u53d6\u308a\u5165\u308c\u3089\u308c\u308b\u3088\u3046\u306b\u7528\u610f\u3055\u308c\u3066\u3044\u308b\u306e\u304c\u3001Django \u306e&nbsp;<a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/topics\/auth\/customizing\/#django.contrib.auth.models.PermissionsMixin\"><code>PermissionsMixin<\/code><\/a>&nbsp;\u3067\u3059\u3002\u3053\u308c\u306f\u30e6\u30fc\u30b6\u30fc\u30e2\u30c7\u30eb\u306e\u968e\u5c64\u306b\u53d6\u308a\u5165\u308c\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u62bd\u8c61\u30e2\u30c7\u30eb\u3067\u3001Django \u306e\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u30e2\u30c7\u30eb\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u306e\u306b\u5fc5\u8981\u306a\u3059\u3079\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u3068\u30c7\u30fc\u30bf\u30fc\u30d9\u30fc\u30b9\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u4f7f\u3048\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p><a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/topics\/auth\/customizing\/#django.contrib.auth.models.PermissionsMixin\"><code>PermissionsMixin<\/code><\/a>&nbsp;\u306f\u3001\u4ee5\u4e0b\u306e\u30e1\u30bd\u30c3\u30c9\u3068\u5c5e\u6027\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<em>class&nbsp;<\/em><code>models.<\/code><code>PermissionsMixin<\/code><a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/topics\/auth\/customizing\/#django.contrib.auth.models.PermissionsMixin\">\u00b6<\/a><code>is_superuser<\/code><a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/topics\/auth\/customizing\/#django.contrib.auth.models.PermissionsMixin.is_superuser\">\u00b6<\/a><\/p>\n\n\n\n<p>\u771f\u507d\u5024\u3067\u3059\u3002\u660e\u793a\u7684\u306b\u4e0e\u3048\u3089\u308c\u306a\u3044\u5834\u5408\u3067\u3082\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u304c\u5168\u3066\u306e\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3092\u6301\u3063\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u793a\u3057\u307e\u3059\u3002<code>get_user_permissions<\/code>(<em>obj=None<\/em>)<a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/topics\/auth\/customizing\/#django.contrib.auth.models.PermissionsMixin.get_user_permissions\">\u00b6<\/a>New in Django 3.0.<\/p>\n\n\n\n<p>Returns a set of permission strings that the user has directly.<\/p>\n\n\n\n<p>If&nbsp;<code>obj<\/code>&nbsp;is passed in, only returns the user permissions for this specific object.<code>get_group_permissions<\/code>(<em>obj=None<\/em>)<a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/topics\/auth\/customizing\/#django.contrib.auth.models.PermissionsMixin.get_group_permissions\">\u00b6<\/a><\/p>\n\n\n\n<p>\u30e6\u30fc\u30b6\u304c\u30b0\u30eb\u30fc\u30d7\u3092\u901a\u3057\u3066\u6301\u3064\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u306e\u6587\u5b57\u5217\u306e\u30bb\u30c3\u30c8\u3092\u8fd4\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><code>obj<\/code>&nbsp;\u304c\u6e21\u3055\u308c\u305f\u3068\u304d\u3001\u6307\u5b9a\u3055\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u306e\u307f\u3092\u8fd4\u3057\u307e\u3059\u3002<code>get_all_permissions<\/code>(<em>obj=None<\/em>)<a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/topics\/auth\/customizing\/#django.contrib.auth.models.PermissionsMixin.get_all_permissions\">\u00b6<\/a><\/p>\n\n\n\n<p>\u30e6\u30fc\u30b6\u304c\u30b0\u30eb\u30fc\u30d7\u304a\u3088\u3073\u30e6\u30fc\u30b6\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3092\u901a\u3057\u3066\u6301\u3064\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u306e\u6587\u5b57\u5217\u306e\u30bb\u30c3\u30c8\u3092\u8fd4\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><code>obj<\/code>&nbsp;\u304c\u6e21\u3055\u308c\u305f\u5834\u5408\u3001\u6307\u5b9a\u3055\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3059\u308b\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u306e\u307f\u3092\u8fd4\u3057\u307e\u3059\u3002<code>has_perm<\/code>(<em>perm<\/em>,&nbsp;<em>obj=None<\/em>)<a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/topics\/auth\/customizing\/#django.contrib.auth.models.PermissionsMixin.has_perm\">\u00b6<\/a><\/p>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u304c\u6307\u5b9a\u3057\u305f\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3092\u6301\u3063\u3066\u3044\u308b\u5834\u5408\u3001<code>True<\/code>&nbsp;\u3092\u8fd4\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u3001<code>perm<\/code>&nbsp;\u306f&nbsp;<code>\"&lt;app&nbsp;label&gt;.&lt;permission&nbsp;codename&gt;\"<\/code>&nbsp;\u3068\u3044\u3046\u5f62\u5f0f\u3067\u6307\u5b9a\u3057\u307e\u3059 (<a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/topics\/auth\/default\/#topic-authorization\">permissions<\/a>&nbsp;\u3092\u53c2\u7167)\u3002\u3082\u3057\u3001<a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/ref\/contrib\/auth\/#django.contrib.auth.models.User.is_active\"><code>User.is_active<\/code><\/a>&nbsp;\u3068&nbsp;<a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/ref\/contrib\/auth\/#django.contrib.auth.models.User.is_superuser\"><code>is_superuser<\/code><\/a>&nbsp;\u304c\u4e21\u65b9\u3068\u3082&nbsp;<code>True<\/code>&nbsp;\u3060\u3063\u305f\u5834\u5408\u3001\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u5e38\u306b&nbsp;<code>True<\/code>&nbsp;\u3092\u8fd4\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><code>obj<\/code>&nbsp;\u304c\u6e21\u3055\u308c\u305f\u5834\u5408\u3001\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u30e2\u30c7\u30eb\u306b\u5bfe\u3059\u308b\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u306e\u30c1\u30a7\u30c3\u30af\u3092\u884c\u308f\u305a\u3001\u6307\u5b9a\u3055\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u884c\u3044\u307e\u3059\u3002<code>has_perms<\/code>(<em>perm_list<\/em>,&nbsp;<em>obj=None<\/em>)<a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/topics\/auth\/customizing\/#django.contrib.auth.models.PermissionsMixin.has_perms\">\u00b6<\/a><\/p>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u304c\u6307\u5b9a\u3057\u305f\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3092\u6301\u3063\u3066\u3044\u308b\u5834\u5408\u3001<code>True<\/code>&nbsp;\u3092\u8fd4\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u3001<code>perm<\/code>&nbsp;\u306f&nbsp;<code>\"&lt;app&nbsp;label&gt;.&lt;permission&nbsp;codename&gt;\"<\/code>&nbsp;\u3068\u3044\u3046\u5f62\u5f0f\u3067\u6307\u5b9a\u3057\u307e\u3059\u3002\u3082\u3057\u3001<a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/ref\/contrib\/auth\/#django.contrib.auth.models.User.is_active\"><code>User.is_active<\/code><\/a>&nbsp;\u3068&nbsp;<a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/ref\/contrib\/auth\/#django.contrib.auth.models.User.is_superuser\"><code>is_superuser<\/code><\/a>&nbsp;\u304c\u4e21\u65b9\u3068\u3082&nbsp;<code>True<\/code>&nbsp;\u3060\u3063\u305f\u5834\u5408\u3001\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u5e38\u306b&nbsp;<code>True<\/code>&nbsp;\u3092\u8fd4\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><code>obj<\/code>&nbsp;\u304c\u6e21\u3055\u308c\u305f\u5834\u5408\u3001\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f\u6307\u5b9a\u3055\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u306e\u30c1\u30a7\u30c3\u30af\u3092\u884c\u3044\u3001\u30e2\u30c7\u30eb\u306b\u5bfe\u3057\u3066\u306f\u884c\u3044\u307e\u305b\u3093\u3002<code>has_module_perms<\/code>(<em>package_name<\/em>)<a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/topics\/auth\/customizing\/#django.contrib.auth.models.PermissionsMixin.has_module_perms\">\u00b6<\/a><\/p>\n\n\n\n<p>Returns&nbsp;<code>True<\/code>&nbsp;if the user has any permissions in the given package (the Django app label). If&nbsp;<a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/ref\/contrib\/auth\/#django.contrib.auth.models.User.is_active\"><code>User.is_active<\/code><\/a>&nbsp;and&nbsp;<a href=\"https:\/\/docs.djangoproject.com\/ja\/3.0\/ref\/contrib\/auth\/#django.contrib.auth.models.User.is_superuser\"><code>is_superuser<\/code><\/a>&nbsp;are both&nbsp;<code>True<\/code>, this method always returns&nbsp;<code>True<\/code>.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>class CustomUser(AbstractBaseUser, PermissionsMixin):\n    email = models.EmailField(&#39;\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9&#39;, unique=True)\n    first_name = models.CharField((&#39;\u59d3&#39;), max_length=30)\n    last_name = models.CharField((&#39;\u540d&#39;), max_length=30)\n    description = models.TextField(&#39;\u81ea\u5df1\u7d39\u4ecb&#39;, default=&quot;&quot;, blank=True)\n    image = models.ImageField(upload_to=&#39;images&#39;, verbose_name=&#39;\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u753b\u50cf&#39;, null=True, blank=True)<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">view.py<\/h2>\n\n\n\n<p>allauth.account\u304b\u3089\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u305fviews\u306eLoginView\u3092\u5f15\u6570<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>class LoginView(views.LoginView):\n    template_name = &#39;accounts\/login.html&#39;<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"accounts\/views.py\"><code>from django.shortcuts import render, redirect\nfrom django.views import View\nfrom accounts.models import CustomUser\nfrom accounts.forms import ProfileForm,SignupUserForm\nfrom allauth.account import views\nfrom django.contrib.auth.mixins import LoginRequiredMixin\n\n# Create your views here.\nclass ProfileView(LoginRequiredMixin,View):\n    def get(self, request, *args, **kwargs):\n        user_data = CustomUser.objects.get(id=request.user.id)\n\n        return render(request, &#39;accounts\/profile.html&#39;, {\n            &#39;user_data&#39;: user_data,\n        })\n\nclass ProfileEditView(LoginRequiredMixin,View):\n    def get(self, request, *args, **kwargs):\n        user_data = CustomUser.objects.get(id=request.user.id)\n        form = ProfileForm(\n            request.POST or None,\n            initial={\n                &#39;first_name&#39;: user_data.first_name,\n                &#39;last_name&#39;: user_data.last_name,\n                &#39;department&#39;: user_data.department,\n                &#39;description&#39;: user_data.description,\n                &#39;image&#39;: user_data.image,\n            }\n        )\n\n        return render(request, &#39;accounts\/profile_edit.html&#39;, {\n            &#39;form&#39;: form,\n            &#39;user_data&#39;: user_data\n        })\n\n    def post(self, request, *args, **kwargs):\n        form = ProfileForm(request.POST or None)\n        if form.is_valid():\n            user_data = CustomUser.objects.get(id=request.user.id)\n            user_data.first_name = form.cleaned_data[&#39;first_name&#39;]\n            user_data.last_name = form.cleaned_data[&#39;last_name&#39;]\n            user_data.description = form.cleaned_data[&#39;description&#39;]\n            if request.FILES.get(&#39;image&#39;):\n                user_data.image = request.FILES.get(&#39;image&#39;)\n            user_data.save()\n            return redirect(&#39;profile&#39;)\n\n        return render(request, &#39;accounts\/profile.html&#39;, {\n            &#39;form&#39;: form\n        })\n\nclass LoginView(views.LoginView):\n    template_name = &#39;accounts\/login.html&#39;\n\nclass LogoutView(views.LogoutView):\n    template_name = &#39;accounts\/logout.html&#39;\n\n    def post(self, *args, **kwargs):\n        if self.request.user.is_authenticated:\n            self.logout()\n        return redirect(&#39;\/&#39;)\n\nclass SignupView(views.SignupView):\n    template_name = &#39;accounts\/signup.html&#39;\n    form_class = SignupUserForm<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">html<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">profile.html<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"701\" height=\"423\" src=\"http:\/\/www.agile-software.site\/wp-content\/uploads\/2021\/05\/profile_html.png\" alt=\"\" class=\"wp-image-737\"\/><\/figure>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"accounts\/templates\/accounts\/profile.htm\"><code>&lt;tr&gt;\n    &lt;th class=&quot;header&quot;&gt;\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u753b\u50cf&lt;\/th&gt;\n    &lt;td class=&quot;data&quot;&gt;\n        {% if user_data.image %}\n            &lt;img src=&#39;\/{{ user_data.image.url }}&#39; width=100px&gt;\n        {% endif %}\n    &lt;\/td&gt;\n&lt;\/tr&gt;\n&lt;tr&gt;\n    &lt;th class=&quot;header&quot;&gt;\u540d\u524d&lt;\/th&gt;\n    &lt;td class=&quot;data&quot;&gt;{{ user_data.first_name }} {{ user_data.last_name }}&lt;\/td&gt;\n&lt;\/tr&gt;\n&lt;tr&gt;\n    &lt;th class=&quot;header&quot;&gt;\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9&lt;\/th&gt;\n    &lt;td class=&quot;data&quot;&gt;{{ user_data.email }}&lt;\/td&gt;\n&lt;\/tr&gt;\n&lt;tr&gt;\n    &lt;th class=&quot;header&quot;&gt;\u81ea\u5df1\u7d39\u4ecb&lt;\/th&gt;\n    &lt;td class=&quot;data&quot;&gt;{{ user_data.description }}&lt;\/td&gt;\n&lt;\/tr&gt;<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">profile_edit.html<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"703\" height=\"617\" src=\"http:\/\/www.agile-software.site\/wp-content\/uploads\/2021\/05\/profile_edit.png\" alt=\"\" class=\"wp-image-736\"\/><\/figure>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"accounts\/templates\/accounts\/profile_edit.html\"><code>&lt;form method=&quot;post&quot; enctype=&quot;multipart\/form-data&quot;&gt;\n    {% csrf_token %}\n    &lt;table class=&quot;profile_table mb-4&quot;&gt;\n        &lt;tbody&gt;\n            &lt;tr&gt;\n                &lt;th class=&quot;header&quot;&gt;\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u753b\u50cf&lt;\/th&gt;\n                &lt;td class=&quot;data&quot;&gt;\n                    {{ form.image }}\n                &lt;\/td&gt;\n            &lt;\/tr&gt;\n            &lt;tr&gt;\n                &lt;th class=&quot;header&quot;&gt;\u540d\u524d&lt;\/th&gt;\n                &lt;td class=&quot;data form_wrap form_wrap-2&quot;&gt;\n                    {% render_field form.first_name class=&quot;form-control&quot; placeholder=&quot;\u59d3&quot; %}\n                    {% render_field form.last_name class=&quot;form-control&quot; placeholder=&quot;\u540d&quot; %}\n                &lt;\/td&gt;\n            &lt;\/tr&gt;\n            &lt;tr&gt;\n                &lt;th class=&quot;header&quot;&gt;\u81ea\u5df1\u7d39\u4ecb&lt;\/th&gt;\n                &lt;td class=&quot;data&quot;&gt;\n                    {% render_field form.description class=&quot;form-control&quot; placeholder=&quot;\u81ea\u5df1\u7d39\u4ecb&quot; %}\n                &lt;\/td&gt;\n            &lt;\/tr&gt;\n        &lt;\/tbody&gt;\n    &lt;\/table&gt;<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e88\u7d04\u30e2\u30c7\u30eb<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>from django.utils import timezone\n\n\nclass Booking(models.Model):\n    staff = models.ForeignKey(Staff, verbose_name=&#39;\u30b9\u30bf\u30c3\u30d5&#39;, on_delete=models.CASCADE)\n    first_name = models.CharField(&#39;\u59d3&#39;, max_length=100, null=True, blank=True)\n    last_name = models.CharField(&#39;\u540d&#39;, max_length=100, null=True, blank=True)\n    tel = models.CharField(&#39;\u96fb\u8a71\u756a\u53f7&#39;, max_length=100, null=True, blank=True)\n    remarks = models.TextField(&#39;\u5099\u8003&#39;, default=&quot;&quot;, blank=True)\n    start = models.DateTimeField(&#39;\u958b\u59cb\u6642\u9593&#39;, default=timezone.now)\n    end = models.DateTimeField(&#39;\u7d42\u4e86\u6642\u9593&#39;, default=timezone.now)\n\n    def __str__(self):\n        start = timezone.localtime(self.start).strftime(&#39;%Y\/%m\/%d %H:%M&#39;)\n        end = timezone.localtime(self.end).strftime(&#39;%Y\/%m\/%d %H:%M&#39;)\n        return f&#39;{self.first_name}{self.last_name} {start} ~ {end} {self.staff}&#39;\n<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u30b9\u30bf\u30c3\u30d5\u30ea\u30b9\u30c8\u306e\u4f5c\u6210<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">style.css<\/h2>\n\n\n\n<div class=\"wp-block-jin-gb-block-box-with-headline kaisetsu-box1\"><div class=\"kaisetsu-box1-title\">base.html<\/div>\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>body {\n    background: #F1F1F1;\n    display: flex;\n    flex-flow: column;\n    min-height: 100vh;\n}\n\nmain {\n    flex: 1;\n}<\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-jin-gb-block-box-with-headline kaisetsu-box1\"><div class=\"kaisetsu-box1-title\">store<\/div>\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>.storelist img {\n    height: 150px;\n    object-fit: contain;\n}<\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>* {\n    margin: 0;\n    padding: 0;\n    box-sizing: border-box;\n}\n\nbody {\n    background: #F1F1F1;\n    display: flex;\n    flex-flow: column;\n    min-height: 150vh;\n}\n\nmain {\n    flex: 1;\n}\n\n.card-profile {\n    width: 700px;\n    border: 0;\n    border-radius: 1rem;\n    box-shadow: 0 0.2rem 0.2rem 0 rgba(0, 0, 0, 0.1);\n}\n\n.button {\n    width: 150px;\n}\n\n.btn {\n    font-size: 80%;\n    border-radius: 5rem;\n    font-weight: bold;\n}\n\n.profile_table {\n    width: 100%;\n    border: 1px solid #D1DBEB;\n    border-radius: 8px;\n    border-collapse: separate;\n    overflow: hidden;\n}\n\n.profile_table .header {\n    width: 200px;\n    padding: 16px 24px;\n    text-align: left;\n    background: #F1F5FA;\n}\n\n.profile_table .data {\n    padding: 16px 24px;\n}\n\n.form_wrap {\n    display: grid;\n    gap: 16px;\n}\n\n.form_wrap-2 {\n    grid-template-columns: repeat(2, 1fr);\n}\n\n.form-control:focus {\n    box-shadow: none;\n}\n\n.card-auth {\n    width: 400px;\n    border: 0;\n    border-radius: 1rem;\n    box-shadow: 0 0.2rem 0.2rem 0 rgba(0, 0, 0, 0.1);\n}\n\n.card-title {\n    margin-bottom: 2rem;\n    font-size: 1.5rem;\n}\n\n.card-body {\n    padding: 2rem;\n}\n\n.form-auth {\n    width: 100%;\n}\n\n.form-label-group {\n    margin-bottom: 1rem;\n}\n\n.form-label-group input {\n    border-radius: 2rem;\n}\n\n.top img {\n    object-fit: cover;\n    height: 600px;\n}\n\n.overlay {\n    position: absolute;\n}\n\n.title {\n    font-size: 4rem;\n}\n\n.subtitle {\n    font-size: 2rem;\n}\n\n.navbar-nav {\n    flex-direction: row!important;\n}\n\n.nav-color {\n    color: black;\n}\n\n.nav-color:hover {\n    color: #EE6C4D;\n}\n\n.nav-color:after {\n    content: &quot;&quot;;\n    display: block;\n    height: 2px;\n    background: #EE6C4D;\n    margin-top: 6px;\n    opacity: 0;\n    transform: translateY(12px);\n    transition: all 0.3s ease-in-out;\n}\n\n.nav-color:hover:after {\n    transform: translateY(0px);\n    opacity: 1;\n}\n\n\/* store *\/\n\n.storelist img {\n    height: 150px;\n    object-fit: contain;\n}\n\/* index *\/\n#home {\n    background-image: url(..\/..\/..\/media\/images\/\u30d5\u30ea\u30fc\u30e9\u30f3\u30b9\u306e\u5bbf.png);\n    min-height: 100vh;\n}\n\n\/* contact *\/\n\n#image {\n    background-image: url(..\/..\/media\/images\/\u304a\u554f\u3044\u5408\u308f\u305b.png);\n    min-height: 150vh;\n}\n.contact {\n\n    max-width: 500px;\n}\n\n.form-control:focus {\n    border-color: #EE6C4D;\n    box-shadow: none;\n}\n\n.card {\n    border: none;\n}\n\n\/* \u5e97\u8217\u60c5\u5831\u30fb\u5730\u56f3 *\/\n#location {\n    padding: 4% 0;\n}\n#location .wrapper {\n    display: flex;\n    justify-content: space-between;\n}\n.location-info {\n    width: 22%;\n}\n.location-info p {\n    padding: 12px 10px;\n}\n.location-map {\n    width: 74%;\n}\n\n\/* SNS *\/\n#sns {\n    background: #FAF7F0;\n    padding: 4% 0;\n}\n#sns .wrapper {\n    display: flex;\n    justify-content: space-between;\n}\n#sns .sub-title {\n    margin-bottom: 30px;\n}\n.sns-box {\n    width: 30%;\n}\n<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u304a\u554f\u3044\u5408\u308f\u305b\u4f5c\u6210<\/h2>\n\n\n\n<p>\u30bf\u30fc\u30df\u30ca\u30eb\u4e0a\u3067\u30e1\u30fc\u30eb\u9001\u4fe1\u306e\u78ba\u8a8d\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>EMAIL_BACKEND = &#39;django.core.mail.backends.console.EmailBackend&#39;\n<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">URL\u4f5c\u6210<\/h3>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>path(&#39;&#39;, views.ContactView.as_view(), name=&#39;store&#39;),<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">form.py\u4f5c\u6210<\/h3>\n\n\n\n<p>EmailField\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>from django import forms\n\n\nclass ContactForm(forms.Form):\n    name = forms.CharField(max_length=30, label=&#39;\u540d\u524d&#39;)\n    email = forms.EmailField(max_length=30, label=&#39;\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9&#39;)\n    message = forms.CharField(label=&#39;\u30e1\u30c3\u30bb\u30fc\u30b8&#39;, widget=forms.Textarea())<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">views.py<\/h3>\n\n\n\n<p>.forms\u304b\u3089ContactForm\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002<br>django.core.mail\u304b\u3089BadHeaderError,&nbsp;EmailMessage\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002<br>import textwrap\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><br>get\u3068post\u306b\u95a2\u3057\u3066\u306f\u4e0b\u8a18\u8a18\u4e8b\u306b\u8a73\u3057\u304f\u66f8\u3044\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\nhttp:\/\/www.agile-software.site\/2021\/04\/24\/django-render%e3%83%a1%e3%82%bd%e3%83%83%e3%83%89\/\n\n\n\n<p>\u5148\u982d\u306e\u7a7a\u767d\u3092\u524a\u9664\u3059\u308b\u305f\u3081\u306b<code>textwrap.deden<\/code>\u95a2\u6570\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">contact.html<\/h3>\n\n\n\n<p>&nbsp;{%&nbsp;csrf_token&nbsp;%}<br>render_field<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5730\u56f3\u3092\u8868\u793a<\/h3>\n\n\n\n<p><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Google\u30de\u30c3\u30d7\u3067\u8868\u793a\u3057\u305f\u3044\u5834\u6240\u306e\u4f4f\u6240\u3092\u5165\u529b<\/li><li>\u5171\u6709\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001\u5730\u56f3\u3092\u57cb\u3081\u8fbc\u3080\u3092\u30af\u30ea\u30c3\u30af<\/li><li>\u30ab\u30b9\u30bf\u30e0\u30b5\u30a4\u30ba\u3092\u300c800\u00d7400\u300d\u306e\u30b5\u30a4\u30ba\u306b\u8a2d\u5b9a\u3057\u3001HTML\u3092\u30b3\u30d4\u30fc<\/li><\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">SNS\u30ec\u30a4\u30a2\u30a6\u30c8<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Facebook<\/h4>\n\n\n\n<p>\u500b\u4eba\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30da\u30fc\u30b8\u306f\u4f7f\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002Facebook\u30da\u30fc\u30b8(\u30d3\u30b8\u30cd\u30b9\u30a2\u30ab\u30a6\u30f3\u30c8)\u3092\u4f5c\u6210\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n\n\n<h4 class=\"wp-block-heading\">Twitter<\/h4>\n","protected":false},"excerpt":{"rendered":"<p>\u6559\u6750\u4e00\u89a7 \u30e2\u30c7\u30eb \u30ab\u30b9\u30bf\u30e0\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u00b6 Django \u306e\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u30ab\u30b9\u30bf\u30e0\u306e\u30e6\u30fc\u30b6\u30fc\u30e2\u30c7\u30eb\u306b\u7c21\u5358\u306b\u53d6\u308a\u5165\u308c\u3089\u308c\u308b\u3088\u3046\u306b\u7528\u610f\u3055\u308c\u3066\u3044\u308b\u306e\u304c\u3001Django \u306ePermissio<\/p>\n","protected":false},"author":1,"featured_media":584,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jin_ogp_image_url":"","_jin_last_featured_id":0,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-541","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-django"],"_links":{"self":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts\/541","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=541"}],"version-history":[{"count":8,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts\/541\/revisions"}],"predecessor-version":[{"id":765,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts\/541\/revisions\/765"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/media\/584"}],"wp:attachment":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=541"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=541"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=541"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}