基于Django登录系统

基于Django用户登录认证

使用cookie的登录认证

(1)建表:
 from django.db import models
 class UserInfo(models.Model):
      username=models.CharField(max_length=32)
      password=models.CharField(max_length=32)

(2)建立url与views之间的对应关系:
url:
from django.conf.urls import url
from app01 import views
urlpatterns = [
    url(r'^login_cookie/', views.login_cookie),
url(r'^index/', views.index),]
views:
def login_cookie(request):
  
if request.method=="POST":
user
=request.POST.get("user")
pwd
=request.POST.get("pwd")
user
=UserInfo.objects.filter(username=user,password=pwd).first()
if user:
obj
=redirect("/index/")
obj.set_cookie(
"is_login",True)
obj.set_cookie(
"username",user.username)
return obj
return render(request,"login.html")

def index(request):
if not request.COOKIES.get("is_login"):
return redirect("/login/")
name
=request.COOKIES.get("user")
return render(request,"index.html",{"name":name})
(3)新建login页面和index页面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="/login/" method="post">
    {% csrf_token %}
    <p>姓名:<input type="text" name="user"></p>
    <p>密码:<input type="password" name="pwd"></p>

    <input type="submit">
    <a href="/reg/"><input type="button" value="注册"></a>

</form>

</body>
</html>
login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<h3>welcome {{ name }}</h3>
<a href="/logout/">注销</a>
<a href="/setpwd/">修改密码</a>
</body>
</html>
index.html

使用cookie+session的登录认证

(1)建表
from django.db import models
class UserInfo(models.Model):
        username=models.CharField(max_length=32)
        password=models.CharField(max_length=32)

(2)建立url与views之间的关系
url:
from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^login_session/', views.login_session), url(r'^index/', views.index),]

views:
def login_session(request):

if request.method=="POST":
user=request.POST.get("user")
pwd=request.POST.get("pwd")

user=UserInfo.objects.filter(username=user,password=pwd).first()
if user:

request.session["Is_login"]=True
# request.session["user"]=user.username

return redirect("/index")

return render(request,"login.html")

def index_session(request):
if not request.session.get("Is_login"):
return redirect("/login/")
'''
uuid=request.COOKIE.get("sessionID") # 2134shdc329cbk398asdbk2
django的session表中做过滤:
session_user=session.objects.filter(session-key="2134shdc329cbk398asdbk2").first()
ret=session_user.session_data.get("Is_login") # {"Is_login":True,"user":"alex"}

'''
name=request.session.get("user")
return render(request,"index.html",{"name":name})

(3)新建login页面和index页面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="/login/" method="post">
    {% csrf_token %}
    <p>姓名:<input type="text" name="user"></p>
    <p>密码:<input type="password" name="pwd"></p>

    <input type="submit">
    <a href="/reg/"><input type="button" value="注册"></a>

</form>

</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<h3>welcome {{ name }}</h3>
<a href="/logout/">注销</a>
<a href="/setpwd/">修改密码</a>
</body>
</html>
index.html

基于auth登录认证系统

(1)django自动建表(auth_user表)
(2)url与views建立联系

url:
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
    url(r'^login/', views.login),         #登录页面
    url(r'^index/', views.index),       #登录成功之后跳到的页面
    url(r'^logout/', views.log_out),   #登出页面
    url(r'^reg/', views.reg),             #注册页面
    url(r'^setpwd/', views.setpwd),   #修改密码页面
]

views:


from django.contrib.auth.models import User
from django.contrib import auth


##################################  基于auth模块与user表
def login(request):
    if request.method == "POST":
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")

        user=auth.authenticate(username=user,password=pwd)
        if user:
            auth.login(request,user) #  request.session["user"]=user.username
            return redirect("/index/")

    return render(request, "login.html")

def index(request):
    user=request.user  #  显示当前登录用户对象
    if not user.is_authenticated():
         return redirect("/login/")

    name=request.user.username
    return render(request,"index.html",{"name":name})

def log_out(request):

    auth.logout(request)  #  request.session.flush()

    return redirect("/login/")


def reg(request):
    if request.method == "POST":
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")

        user=User.objects.create_user(username=user,password=pwd)
        return redirect("/login/")

    return render(request,"reg.html")

def setpwd(request):
    if request.method == "POST":
        user = request.POST.get("user")
        pre_pwd = request.POST.get("pre_pwd")
        new_pwd = request.POST.get("new_pwd")
        repeat_pwd = request.POST.get("repeat_pwd")

        user=auth.authenticate(username=user,password=pre_pwd)
        if user:

            user.set_password(new_pwd)
            user.save()

            return redirect("/login/")


    return render(request,"setpwd.html")

(3)新建登录页面、index页面、注册页面、修改密码页面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="/login/" method="post">
    {% csrf_token %}
    <p>姓名:<input type="text" name="user"></p>
    <p>密码:<input type="password" name="pwd"></p>

    <input type="submit">
    <a href="/reg/"><input type="button" value="注册"></a>

</form>

</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<h3>welcome {{ name }}</h3>
<a href="/logout/">注销</a>
<a href="/setpwd/">修改密码</a>
</body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>注册页面</h3>
<form action="/reg/" method="post">
    {% csrf_token %}
    <p>姓名:<input type="text" name="user"></p>
    <p>密码:<input type="password" name="pwd"></p>

    <input type="submit">
</form>

</body>
</html>
reg.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>修改密码页面</h3>
<form action="/setpwd/" method="post">
    {% csrf_token %}
    <p>姓名:<input type="text" name="user"></p>
    <p>原密码:<input type="password" name="pre_pwd"></p>
    <p>新密码:<input type="password" name="new_pwd"></p>
    <p>确认密码:<input type="password" name="repeat_pwd"></p>

    <input type="submit">
</form>

</body>
</html>
setpwd.html

 

说明:
auth模块------------auth.user(username password email)
   auth模块API:
    
        验证函数:user=auth.authenticate(username=username,password=password)  
                  if 有该用户:user就是用户对象,否则,为None
                  
        登录函数(写入session记录的方法):
         auth.login(request,user)    #  session表添加一条记录 request.session["user_id"]=user.id    
                  
        注销函数(清除一条session记录)
         auth.logout(request)        #  request.session.flush()
                  
                  
    user=request.user(********):  
if登录(auth.login(request,user))------>当前登录用户对象 没有登录----------->匿名对象 user对象的API: user.is_authenticated() -----if登录,返回true,否则,false 注册方法:User.objects.create_user(username=username,password=password) 修改密码: user.set_password(new_pwd) user.save()

 

posted @ 2017-12-13 17:19  星雨5213  阅读(113)  评论(0)    收藏  举报