简体   繁体   English

Django:验证用户身份后创建评论表单

[英]Django: create a comment form when user is authenticated

I'm creating a simple blog application. 我正在创建一个简单的博客应用程序。 A user is logged in this application while He/She can comment any post on my blog application. 用户在此应用程序中登录后,他/她可以在我的博客应用程序中评论任何帖子。 But cant impletement that idea. 但是不能实现那个想法。 This is my models.py file 这是我的models.py文件

from django.db import models

# Create your models here.

from user.models import CustomUser

from django.conf import settings
from django.db import models
from django.urls import reverse

class BlogPost(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
    blog_title=models.CharField(max_length=200)
    blog_description=models.TextField()
    blog_pub=models.DateTimeField(auto_now_add=True)
    blog_update=models.DateTimeField(auto_now=True)


    def __str__(self):
        return self.blog_title


    def get_absolute_url(self):

        return reverse('blog:blog_post', kwargs={'pk': self.pk})




class Comment(models.Model):
    blogpost=models.ForeignKey(BlogPost, on_delete=models.CASCADE)
    comment=models.CharField(max_length=300)
    author=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,blank=True, null=True)
    author_name = models.CharField(max_length=50, default='anonymous', verbose_name=("user name"))
    comment_pub = models.DateTimeField(auto_now_add=True)

    comment_update = models.DateTimeField(auto_now=True)

    def get_absolute_url(self):
        return reverse('blog:home', kwargs={'pk':self.pk})

    def __str__(self):
        return self.comment

This is views.py file 这是views.py文件

class BlogPostSingle(DetailView, FormView):
    model=BlogPost
    template_name='blog/blog_post_single.html'
    #fields = ['blog_title']
    form_class = CreateCommentForm
    success_url = '/blog/'

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

this is my forms.py file 这是我的forms.py文件

class CreateCommentForm(ModelForm):
    class Meta:
        model=Comment
        fields = ('comment', 'blogpost')

and this is my html file and forms section 这是我的html文件和表单部分

{% if user.is_authenticated %}
        <h5>Hi, {{user.name}} leave your comment now</h5>
        <form action="" method="post">
            {% csrf_token %} {{form.as_p}}

            <input type="submit" value="Submit comment">
        </form>
        {% else %}
        <p>You're not logged in this site, please  <a href="{% url 'login' %}">log</a> in for comment </p>
        {% endif %}

My target Idea: Just user logged on my blog application. 我的目标想法:只是用户登录了我的博客应用程序。 He can be able to comment any post on my blog application. 他可以在我的博客应用程序中评论任何帖子。 And my Comment Models contain two forignkey field. 我的评论模型包含两个外键字段。

You should pass the user to your view's context, so it will be available in the template: 您应该将用户传递到视图的上下文,因此它将在模板中可用:

class BlogPostSingle(DetailView, FormView):
    ...
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['user'] = self.request.user
        return context

on get_context_data see https://docs.djangoproject.com/en/2.0/ref/class-based-views/generic-display/#detailview 有关get_context_data请参见https://docs.djangoproject.com/en/2.0/ref/class-based-views/generic-display/#detailview

on self.request see https://docs.djangoproject.com/en/2.0/topics/class-based-views/generic-display/#dynamic-filtering 有关self.request请参见https://docs.djangoproject.com/en/2.0/topics/class-based-views/generic-display/#dynamic-filtering

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM