Django--第三课

登陆功能:

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),
]









猜你喜欢

转载自blog.csdn.net/qq_41655148/article/details/79791369