博客五部曲之二 - 高级博客
1455 浏览 5 years, 11 months
26 用户登陆需求
版权声明: 转载请注明出处 http://www.codingsoho.com/像评论的删除视图,这个只有登录只能才能操作,所以我们可以用django自带的装饰器decorator来完成
from django.contrib.auth.decorators import login_required
@login_required(login_url="/login/")
def comment_delete(request, id):
比如执行http://127.0.0.1:8000/comments/41/delete,如果当时未登录,它会跳转到http://127.0.0.1:8000/login/?next=/comments/41/delete
我们通过@login_required(login_url=”/login”装饰函数comment_delete,同时指定跳转登录URL。这个URL也可以在settings里设置,这样装饰器这儿可以不指定这个参数
LOGIN_URL = "/login/"
@login_required #(login_url="/login/")
def comment_delete(request, id):
在重定向的URL里带有参数next,这个是指定的地址,我们可以读取这个参数,在登陆完成之后回到原视图继续执行操作
next=request.GET.get("next")
if next:
return redirect(next)
有些视图并不是只有登录用户能看,但是有些内容只有登录了才可以操作,有很多方法可以实现对用户的区分,这儿我们通过is_authenticated进行处理。
在post_detail视图,我们可以执行发帖操作,这个只能登陆用户操作。
我们在post_detail和comment_thread函数里添加授权判断处理,只有用户已授权才能执行相应操作
if form.is_valid() and request.user.is_authenticated():
同时,我们在模板里用同样的方法关闭form显示,这post_detail.html和comment_thread.html的所有form窗口
{% if request.user.is_authenticated %}
<form method="post" action="">{% csrf_token %}
{{comment_form|crispy}}
<input type="submit" value="Post Comments" class="btn btn-default">
</form>
{% else %}
<p>You must login to post comment </p>
{% endif %}
至此,必须登陆之后我们才能发帖了