Django有管理用户的模块,即django.contrib.auth。在mysite/settings.py里,这个功能模块已经注册在INSTALLED_APPS中。利用该模块,可以直接在逻辑层面管理用户,不需要为用户建立模型,也不需要手工去实现会话。
可以在admin页面直接看到用户管理的对话框,即Users。在这里创建、删除和修改用户。
点击Add增加用户~~~
在admin页面下,还可以控制不同用户组对数据库的访问权限。可以在Groups中增加用户组,设置用户组对数据库的访问权限,并将用户加入到某个用户组中。
我们创立一个新的app,即users
python manage.py startapp users
增加一个登录表格:
mysite\templates\users\login.html
<h1> Hello World! </h1>
<form role=”form” action=”/users/login/” method=”post”>
{% csrf_token %}
<label>Username</label>
<input type=”text” name=’form_username’>
<label>Password</label>
<input name=”form_password” type=”password”>
<input type=”submit” value=”Submit”>
</form>
<h1>———————</h1>
views.py中,定义处理函数user_login(),来登入用户:
def first_login(request):
return HttpResponse(“<p>Hello USERS</p>”)
def user_login(request):
”’
login
”’
if request.POST:
users = pwd = ”
users = request.POST.get(‘form_username’)
pwd = request.POST.get(‘form_password’)
user = authenticate(username=users, password=pwd)
if user is not None and user.is_active:
login(request, user)
#return redirect(‘/’)
return diff_response(request)
else:
return diff_response(request)
ctx = {}
ctx.update(csrf(request))
return render(request, ‘login.html’,ctx)
登出
views.py中,增加该URL的处理函数:
def user_logout(request):
”’
logout
URL: /users/logout
”’
logout(request)
return redirect(‘/users’)
mysite\users\urls.py
url(r’^$’, views.first_login),
url(r’^login/’, views.user_login),
url(r’^logout/’, views.user_logout),
settings.py
os.path.join(BASE_DIR, ‘templates/west’),
os.path.join(BASE_DIR, ‘templates/users’)
在Django中,对用户身份的检验,主要是在views.py中进行。views.py是连接模型和视图的中间层。HTTP请求会转给views.py中的对应处理函数处理,并发回回复。
用户的登录信息包含在request.user中,is_authenticated()方法用于判断用户是否登录,如果用户没有登录,那么该方法将返回false。该user对象属于contrib.auth.user类型,还有其它属性可供使用,比如
属性 | 功能 |
get_username() | 返回用户名 |
set_password() | 设置密码 |
get_fullname() | 返回姓名 |
last_login | 上次登录时间 |
date_joined | 账户创建时间 |
模板中的用户
{% if user.is_authenticated %}
<p>Welcome, my genuine user, my true love.</p>
{% else %}
<p>Sorry, not login, you are not yet my sweetheart. </p>
{% endif %}
OK~~~~~~~~~~~~~~^
还可以利用装饰器,根据用户的登录状况,来决定views.py中处理函数的显示效果。相对于上面的if结构,装饰器使用起来更加方便。下面的user_only()是views.py中的一个处理函数。
????
@login_required
def user_only(request):
return HttpResponse(“<p>This message is for logged in user only.</p>”)
Django中还有其它的装饰器,用于修饰处理函数。
def name_check(user):
return user.get_username() == ‘test00’
@user_passes_test(name_check)
def specific_user(request):
return HttpResponse(“<p>for Vamei only</p>”)
????
用户注册
Django中的UserCreationForm,比较简洁的生成表格,并在views.py中处理表格:
def register(request):
if request.method == ‘POST’:
form = UserCreationForm(request.POST)
if form.is_valid():
new_user = form.save()
return redirect(“/”)
else:
form = UserCreationForm()
ctx = {‘form’: form}
ctx.update(csrf(request))
return render(request, “register.html”, ctx)
相应的模板register.html
<form action=”” method=”post”>
{% csrf_token %}
{{ form.as_p }}
<input type=”submit” value=”Register”>
</form>
OK~~~~~~~~~~~~~~