我应该如何只允许注册用户在网站中发布?

时间:2019-07-15 05:35:09

标签: django python-3.x django-models

我正在创建一个网站,用户在该网站上发布他的信息,面临的问题是,即使我注销后仍然可以发布。我只希望注册和登录的用户能够在网站上发布

这是针对python 3.7.3,Django 2.2.3,MySQL 5.7.26的,我只想在登录后才发布,但是不幸的是,在登录和注销时,我都可以用两种方式发布。任何人都可以发帖,即使他/她(不是注册用户)

views.py

def PostNew(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.save()
        return redirect('loststuffapp:IndexView')
    else:
        form = PostForm()
    return render(request, 'loststuffapp/form.html', {'form': form})

models.py

class Documents(models.Model):
    docs_name = models.CharField(max_length=200)
    item_type = models.CharField(default="", max_length=100, help_text='*Enter the item name you found e.g. Marksheet,key,wallet')
    police_station = models.CharField(max_length=255, help_text='*Enter the police station you sending the docs')
    phone_no = models.IntegerField(default=0)
    date = models.DateTimeField(default=timezone.now)
    Description = models.TextField(blank=True, null=True, help_text='*Enter full description about item')
    pay_no = models.IntegerField(default=0)
    publish = models.BooleanField(default=False)
    image = models.ImageField(default="add Item image", upload_to="DocsImage",blank=False)

    """docstring for Documents"""
    def __str__(self):
        return self.docs_name

home.html

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

{% block content %}

<a class="waves-effect waves-light btn" href="/PostNew">Add documents</a>

 {% for Doc in documents %}
 <div class="content-wrapper">
  <div class="card">
    <div class="card-image">

    <p>{{Doc.docs_name}}</p>
    <p>{{Doc.item_type}}</p>
    <p>{{Doc.police_station}}</p>
    <p>{{Doc.phone_no}}</p>
    <p>{{Doc.Description}}</p>
    <p><img src = "/media/{{Doc.image.url}}" width = "240"/></p>
    <p>{{Doc.date}}</p>

 </div>
</div>
</div>
 {% endfor %} 

{% endblock %}

1 个答案:

答案 0 :(得分:3)

您可以在查看之前使用@login_required装饰器。

from django.contrib.auth.decorators import login_required

@login_required
def PostNew(request):
   # code

现在,发布任何内容之前,必须先登录。