我正在创建一个网站,用户在该网站上发布他的信息,面临的问题是,即使我注销后仍然可以发布。我只希望注册和登录的用户能够在网站上发布
这是针对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 %}
答案 0 :(得分:3)
您可以在查看之前使用@login_required
装饰器。
from django.contrib.auth.decorators import login_required
@login_required
def PostNew(request):
# code
现在,发布任何内容之前,必须先登录。