用户登录
博客作为内容管理系统(CMS)的一种形式,也应当具有CMS的两个功能:内容管理、权限管理。在之前的几篇中,我们已经实现了内容管理。现在实现用户管理,即用户的登录和登出以及页面权限管理。
首先我们现在一共有以下views: index(), post_view(), post_create(), post_edit(), post_drafts(), post_publish(), post_delete()。在这些views中,出了index()和post_views()这两个属于内容展现的方法以外,其他方法应该都受到登录保护。所以,我们引入django自带的@login_required注解来处理这些方法。
首先在hzblog/views.py中引入login_required,并在需要登录验证的方法前加上注解。
from django.contrib.auth.decorators import login_required @login_required def post_create(request): ... @login_required def post_edit(request, pk): ... @login_required def post_drafts(request): ... @login_required def post_publish(request, pk): ... @login_required def post_delete(request, pk): ...
然后,在hzsite/urls.py中引入登录登出的路由。注意,由于整个系统使用统一的登录登出路由,所以这里不是在app的urls.py中引入路由。
from django.contrib.auth import views urlpatterns = [ ... url(r'^accounts/login/$', views.login, name='login'), url(r'^accounts/logout/$', views.logout, name='logout'), ... ]
这里,我们还要修改一下hzsite/settings.py配置文件,将login/logout操作后的跳转页面定义到’/’目录,即首页。在settings.py中,加入两行:
LOGIN_REDIRECT_URL = '/' LOGOUT_REDIRECT_URL = '/'
引入路由之后,我们创建一个登录页面进行登录。创建hzblog/templates/registration/目录,在目录下创建login.html模板
{% extends "blog/base.html" %} {% block content %} {% if form.errors %} <p>Your username and password didn't match. Please try again.</p> {% endif %} <form method="post" action="{% url 'login' %}"> {% csrf_token %} <table> <tr> <td>{{ form.username.label_tag }}</td> <td>{{ form.username }}</td> </tr> <tr> <td>{{ form.password.label_tag }}</td> <td>{{ form.password }}</td> </tr> </table> <input type="submit" value="login" /> <input type="hidden" name="next" value="{{ next }}" /> </form> {% endblock %}
最后,我们修改base.html模板,在头部加上登录登出的按钮
... <div class="page-header"> {% if user.is_authenticated %} <a href="{% url 'logout' %}" class="top-menu"><span class="glyphicon glyphicon-log-out"></span></a> <a href="{% url 'hzblog:post_create' %}" class="top-menu"><span class="glyphicon glyphicon-plus"></span></a> <a href="{% url 'hzblog:post_drafts' %}" class="top-menu"><span class="glyphicon glyphicon-list-alt"></span></a> <p class="top-menu">Hello {{ user.username }}</p> {% else %} <a href="{% url 'login' %}" class="top-menu"><span class="glyphicon glyphicon-log-in"></span></a> {% endif %} <h1><a href="/">ZIVER'S</a></h1> </div> ...
下面运行博客测试一下功能
python manage.py runserver 0.0.0.0:8080
未登录状态点开首页时,右上角显示登录按钮
点击登录或者使用需要登录的功能(修改、删除等),跳转到登录页面
输入用户信息登录后,右上角出现欢迎信息和只有登录后才可见的按钮
登录功能完美实现。
为了写一个博客,容易么?
哈哈哈,Django已经算是容易的了
看起来还不错~