今天的文章基于之前做的配置,实现一个具体的功能Demo——登录。在login的templates目录下创建两个模板,分别是login.html和home.html,当用户未登录时,跳转到login.html页面,登陆成功或者登录状态,跳转到home.html。
url的配置主要有两个,django_demo下的urls.py,内容如下:
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/', include('login.urls')),
]
app_name = 'login'
urlpatterns = [
url('^$', views.home, name='home'),
url('^do_login/$', views.do_login, name='do_login')
]
两份配置共同定义了两个可访问的url:
http://ip:port/login/
http://ip:port/login/do_login/
看一下两个页面,做的很简单也不美观,主要为了说明功能。login.html如下:
登录
主页
欢迎,{{ username }}
from django.shortcuts import render, redirect, reverse
from django.contrib.auth.decorators import login_required
from django.contrib.auth import authenticate, login
@login_required(login_url='/login/do_login')
def home(request):
return render(request,
'home.html',
{'username': request.user.username})
def do_login(request):
if request.method == 'GET':
return render(request, 'login.html')
username = request.POST.get('username', '')
password = request.POST.get('password', '')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect(reverse('login:home'))
else:
return render(request, 'login.html', {
'username': username,
'password': password,
})
do_login的代码实际上可以作为标准的login流程,首先获取用户名和密码,然后通过authenticate方法进行校验,如果该用户存在,会返回用户对象,通过login函数执行登录,如果用户不存在,返回到login.html页面。
这样,登录实例就完成了。可以运行服务器,通过admin用户登录看看。不过有一个问题,现在没有注册,我们可以添加用户吗?当然可以,一种方法是使用上一篇文章的方法,通过创建User实体类来创建对应的用户。不过还有一种简单的方法,可以登录管理员界面,其中可以添加用户。