1.登录页面
1.1 我的代码
#views.py
# 登录视图
def user_login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request,username=username,password=password)
if user:
if user.is_active:
#login(username,password)
login(request,user)
return HttpResponseRedirect('/admin/')
else:
return HttpResponse("Your account is not active.")
else:
print("Invalid login detail:{0},{1}".format(username,password))
return HttpResponse("Invalid login detail")
else:
return render(request,'myclass/login.html',{})
#login.html
<html>
<head>
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<form id="login_form" action="" method="POST">
{% csrf_token %}
Username:<input type='text' name="username" value="" size="30">
<br/>
Password:<input type='password' name="password" value="" size="30">
<br/>
<input type="submit" value="Submit">
</form>
</body>
</html>
#urls.py
urlpatterns = [
......
path('user_login/', views.user_login, name='user_login'),
......
]
#info.html
<p><a href="/user_login/">user_login</a></p>
1.2 参考官网手册
https://docs.djangoproject.com/zh-hans/3.1/topics/auth/default/#django.contrib.auth.views.LoginView
1.3 代码的错误
login(request,password)误写成了login(username,password),导致出现 AttributeError: ‘str’ object has no attribute ‘session’
2.登入的应用
2.1 装饰器@login_required
最简单的做法,是利用装饰器@login_required来控制权限,如:
# 建立成绩查询界面-all
@login_required
def Search_Subject_Score(request):
score_list = Subject_Score.objects.order_by('sid').all()
return render(request, 'myclass/Search_Subject_Score.html',context={'score_list': score_list}
2.2 用户没有登入的重定向
#setting.py设定好LOGIN_URL后,未登入的用户将自动跳转到’/user_login/’。
LOGIN_URL = '/user_login/'
3. 登出页面:
#views.py
logout无需写template模板,使用重定向即可HttpResponseRedirect(’/user_login/’)。
# 登出页面
@login_required
def user_logout(request):
logout(request)
return HttpResponseRedirect('/user_login/')
#urls.py
urlpatterns = [
......
path('user_logout/', views.user_logout, name='user_logout'),
......
]
#info.html
<p><a href="/user_logout/">user_logout</a></p>
4.登出的应用
主要用于退出当前用户。