登陆功能:
1,在templates中创建一个login.mtml登陆页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆</title>
</head>
<body>
<form action="/blog/login" method="post">
{% csrf_token %}
用户名:<input type="text" value="{{user.username }}"
name ="username" id="username"/>
<span id="mess">{{ mess}}</span><br/>
用户密码:<input type="password" name="pwd"/><br/>
<input type="submit" value="登陆"/>
</form>
</body>
</html>
2,创建一个登陆成功页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆成功</title>
</head>
<body>
<h1>-----------------------登陆系统-----------------------------</h1>
<h2>欢迎{{bloguser.userName}}登陆成功</h2>
</body>
</html>
3.在app的views.py中创建一个函数接受页面传过来的用户名和密码
def login(request):
if request.method=="GET":
return render(request,"login.html")
else:
#接受网页传过来的用户名和密码
uname=request.POST.get("username")
pwd=request.POST.get('pwd')
#从数据库查询是否有此用户名和密码
BlogSet=BLogUser.objects.filter(userName=uname,pwd=pwd)
if len(BlogSet)==1:
return redirect(reverse('user:welcome', args=[BlogSet[0].id]))
else:
return render(request,'welcome.html',
{"mess":"用户名密码不正确"})
def welcome(request,id):
bloguser=BLogUser.objects.get(pk=id)
return render(request,'welcome.html',{"bloguser":bloguser})
4,配置路径
from django.urls import path
from.import views
app_name='user'
urlpatterns = [
path('', views.hello,name='hello'),
path('regist/',views.regist),
path('show/<int:id>',views.show,name='blogshow'),
path('hasname',views.hasname),
path('login',views.login),
path("welcome/<int:id>",views.welcome,name="welcome")
]
5.运行项目,输入http://127.0.0.1:8000/blog/login网页地址登陆
登陆成功后将用户信息放入session里
session和cookies的区别
Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
1,将用户名放入到session
def login(request):
if request.method=="GET":
return render(request,"login.html")
else:
#接受网页传过来的用户名和密码
uname=request.POST.get("username")
pwd=request.POST.get('pwd')
#从数据库查询是否有此用户名和密码
BlogSet=BLogUser.objects.filter(userName=uname,pwd=pwd)
if len(BlogSet)==1:
#登陆成功页面
session=request.session
session["username"]=uname#登陆成功后把用户名放session里面
return redirect(reverse('user:welcome', args=[BlogSet[0].id]))
else:
return render(request,'welcome.html',
{"mess":"用户名密码不正确"})
2,修改下登陆成功后的页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆成功</title>
</head>
<body>
<h1>-----------------------登陆系统-----------------------------</h1>
<h2>欢迎{{bloguser.userName}}登陆成功</h2>
session:{{request.session.username}}#页面取session的值
</body>
</html>
3.实现注销功能
在welcome.html页面加一个超链接
<a href="/blog/logout">注销</a>
在app的views.py中一个注销函数
def logout(requset):
#实现注销session
session=requset.session
#session.clear()
#session.pop("username")
session.flush()
return render(requset,"welcome.html")
在app的urls.py中添加一个路径
path("logout",views.logout),
修改一下welcome页面
<body>
<h1>-----------------------登陆系统-----------------------------</h1>
{%if request.session.username is not null%}
<h2>欢迎{{bloguser.userName}}登陆成功</h2>
<a href="/blog/logout">注销</a>
{%else%}
<a href="/blog/login.html">登陆</a>
{%endif%}
</body>
我们创建两个页面,放在welcome,中一个a.html,一个b.html ,完成功能当没有登陆的时候是访问不到a.html的必须要登陆才能看到
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>a</title>
</head>
<body>
aaaaaaaaaaaaaaaaa登陆后才可以访问的页面<br/>
<a href="/blog/welcome">登陆页面</a>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>b</title>
</head>
<body>
bbbbbbbbbbbbb不用登陆也能访问的页面
</body>
</html>
修改welcome.py页面
</head>
<body>
<h1>-----------------------欢迎登陆学员博客管理系统-----------------------------</h1>
{%if request.session.username is not null%}
<h2>欢迎{{bloguser.userName}}登陆成功</h2>
<a href="/blog/logout">注销</a>
{%else%}
<a href="/blog/login.html">登陆</a>
{%endif%}
<a href="/blog/a">a登陆后才可以访问的页面</a>
<a href="/blog/b">b未登录也可以访问的页面</a>
</body>
</html>
在 views.py中写a和b的函数
#登陆后才可以访问的页面
def a(ruquest):
#判断用户是否登陆
if ruquest.session.get("username")is not None:
return render(ruquest,"a.html")
else:
#记录一下登陆后是否有访问的路径
ruquest.session["uri"]=ruquest.get_raw_uri()
return render(ruquest,"login.html")
def b(ruquest):
return render(ruquest,"b.html")
#登陆成功后判断 如果有访问过的路径,就直接调到访问过的路径
if session.get("uri"):
url=session["uri"]
session.pop("uri")
return redirect(url)
配置路径
from django.urls import path
from.import views
app_name='user'
urlpatterns = [
path('', views.hello,name='hello'),
path('regist/',views.regist),
path('show/<int:id>',views.show,name='blogshow'),
path('hasname',views.hasname),
path('login',views.login),
path("welcome/<int:id>",views.welcome,name="welcome"),
path("logout",views.logout),
path("a",views.a),
path("b",views.b),
]