Django入門ブログ構築 3日目

 


やったこと

views.py 追記部分
  • class PostEditView(LoginRequiredMixin, View):
        def get(self, request, *args, **kwargs):
            post_data = Post.objects.get(id=self.kwargs['pk'])
            form = PostForm(
                request.POST or None,
                initial = {
                    'title':post_data.title,
                    'content': post_data.content
                }
            )
            return render(request, 'app/post_form.html',{
                'form': form
            })

        def post(self, request, *args, **kwargs):
            form = PostForm(request.POST or None)

            if form.is_valid():
                post_data =Post.objects.get(id=self.kwargs['pk'])
                post_data.title = form.cleaned_data['title']
                post_data.content = form.cleaned_data['content']
                post_data.save()
                return redirect('post_detail', self.kwargs['pk'])

            return render(request, 'app/post_form.html', {
                'form':form
            })

    class PostDeleteView(LoginRequiredMixin, View):
        def get(self, request, *args, **kwargs):
            post_data = Post.objects.get(id=self.kwargs['pk'])
            return render(request, 'app/post_delete.html',{
                'post_data': post_data
            })

        def post(self, request, *args, **kwargs):
            post_data = Post.objects.get(id=self.kwargs['pk'])
            post_data.delete()
            return redirect('index')
urls.py
  • from django.urls import path
    from app import views

    urlpatterns = [
        path('',views.IndexView.as_view(), name='index'),
        path('post/<int:pk>', views.PostDetailView.as_view(),name='post_detail'),
        path('post/new', views.CreatePostView.as_view(),name='post_new'),
        path('post/<int:pk>/edit/', views.PostEditView.as_view(),name='post_edit'),
        path('post/<int:pk>/delete/', views.PostDeleteView.as_view(),name='post_delete'),    
    ]

post_form.html
{% extends "app/base.html" %}
{% load widget_tweaks %}

{% block content %}

<div class="my-4">
    <h2>投稿</h2>
</div>
<form method="post">
    {% csrf_token %}
    <div class="formpost">
        {% render_field form.title class="form-control" placeholder="タイトルを入力" %}
    </div>
    <div class="formpost">
        {% render_field form.content class="form-control" placeholder="本文を入力" %}
    </div>
    <button class="btm btn-warning" type="submit">投稿する</button>

</form>

{% endblock %}

post_detai.html

{% extends "app/base.html" %}

{% block content %}
<h2 class="my4">{{ post_data.title }}</h2>
<hr>
<p>{{ post_data.created }} by {{post_data.auther }}</p>
<p>{{ post_data.content|linebreaksbr}}</p>
{% if user.is_authenticated %}
    <hr>
    <div class="d-flex mb-5">
        <a href="{% url 'post_edit' post_data.id %}" class="btn btn-warring mr-2">編集する</a>
        <a href="{% url 'post_delete' post_data.id %}" class="btn btn-danger">削除する</a>
    </div>
{% endif %}


{% endblock%}

post_delete.html

{% extends "app/base.html" %}

{% block content %}
<h2 class="my-4">{{ post_data.title }}</h2>
<hr>
<h5 class="my-4">削除してもよろしいですか?</h5>
<form method="post">
    {% csrf_token %}
    <button class="btn btn-danger" type="submit">削除する</button>
</form>

{% endblock %}

わかったこと

  • 感覚的にではあるがファイル間のつながりがわかってきた。
  • テンプレート言語の書き方もまだ感覚的。

つぎやること

  • 認証機能

コメント

このブログの人気の投稿

Django入門ブログ構築 2日目

Django入門ブログ構築 1日目