Window上python開發--4.Django的用戶登陸模塊User

在搭建網站和web的應用程序時,用戶的登陸和管理是幾乎是每一個網站都必備的。今天主要從一個實例瞭解如下django自己自帶的user模塊。本文並不對user進行擴展。html

主要使用原生的模塊。python

1.User模塊基礎:web

   在使用user 以前先import到本身的iew中。至關與咱們本身寫好的models。只不過這個是系統提供的models。算法

from django.contrib.auth.models import User # 導入user模塊數據庫


1.1User對象屬性

           User 對象屬性:username, password(必填項)password用哈希算法保存到數據庫
            email,last_login,date_joined(字面意思就知道了)
is_staff ; 用戶是否擁有網站的管理權限.
is_active : 是否容許用戶登陸, 設置爲``False``,能夠不用刪除用戶來禁止 用戶登陸


 1.2User 對象方法

         is_authenticated(): 若是是真正的 User 對象,返回值恆爲 True 。 用於檢查用戶是否已經經過了認證。經過認證並不意味着 用戶擁有任何權限,甚至也不檢查該用戶是否處於激活狀 態,這只是代表用戶成功的經過了認證。
      這個方法很重要, 在後臺用request.user.is_authenticated()判斷用戶是否已經登陸,若是true則能夠向前臺展現request.user.name
  
django

  • :set_password(passwd)

                這個方法是用來更改密碼的,先用user=User.objects.get(username='')
                 user.set_password(passeord='')
                 user.save

瀏覽器

  • check_password(passwd)

           用戶須要修改密碼的時候 首先要讓他輸入原來的密碼 ,若是給定的字符串經過了密碼檢查,返回 True

session

  • email_user(subj, msg)

   給用戶發送電子郵件,用 DEFAULT_FROM_EMAIL 的設 置做爲發件人。也能夠用第3個參數 from_email 來 覆蓋設置。



1.3;建立User用戶

   使用 create_user 輔助函數建立用戶:
   from django.contrib.auth.models import User
   user = User.objects.create_user(username='',password='',email='')
   user.save 注意這裏不是save()!



mvc

 1.4. 登陸和認證

        Django 在 django.contrib.auth 中提供了兩個函數來處理這些事情—— authenticate() 和 login()

   authenticate(): 認證給出的用戶名和密碼,使用 authenticate() 函數。它接受兩個參數,用戶名 username 和 密碼 password ,並在密碼對用給出的用戶名是合法的狀況下返回一個 User 對象。當給出的密碼不合法的時候 authenticate() 函數返回 None
    login() :該函數接受一個 HttpRequest 對象和一個 User 對象做爲參數並使用Django的會話( session )框架把用戶的ID保存在該會話中
    from django.contrib import auth
   user = auth.authenticate(username=username, password=password)
   if user:
      auth.login(request, user)app

1.5.註銷和重定向

註銷 logout()該函數接受一個 HttpRequest 對象做爲參數,沒有返回值
      auth.logout(request)

重定向:HttpResponseRedirect()該函數主要實現,url的重定向。

在咱們登陸和註銷後,重定向到指定url。該函數能夠採用url的硬編碼。

 return HttpResponseRedirect('/sbook/sb_show')

2.實現用戶註冊和登陸

  經過上面的基礎知識,咱們已經瞭解如何建立和更新一個user啦。接下來用一個實例來作一下用戶的註冊和登陸。

案子mvc的模型,系統已經提供了model,因此咱們要作的只須要實現iew和template就好了。在view.py 中實現對註冊和登陸的控制。

先看如下view中的代碼

def alogin(request):
    errors= []
    account=None
    password=None
    if request.method == 'POST' :
        if not request.POST.get('account'):
            errors.append('Please Enter account')
        else:
            account = request.POST.get('account')
        if not request.POST.get('password'):
            errors.append('Please Enter password')
        else:
            password= request.POST.get('password')
        if account is not None and password is not None :
             user = authenticate(username=account,password=password)
             if user is not None:
                 if user.is_active:
                     login(request,user)
                     return HttpResponseRedirect('/index')
                 else:
                     errors.append('disabled account')
             else :
                  errors.append('invaild user')
    return render_to_response('account/login.html', {'errors': errors})
def register(request):
    errors= []
    account=None
    password=None
    password2=None
    email=None
    CompareFlag=False

    if request.method == 'POST':
        if not request.POST.get('account'):
            errors.append('Please Enter account')
        else:
            account = request.POST.get('account')
        if not request.POST.get('password'):
            errors.append('Please Enter password')
        else:
            password= request.POST.get('password')
        if not request.POST.get('password2'):
            errors.append('Please Enter password2')
        else:
            password2= request.POST.get('password2')
        if not request.POST.get('email'):
            errors.append('Please Enter email')
        else:
            email= request.POST.get('email')

        if password is not None and password2 is not None:
            if password == password2:
                CompareFlag = True
            else :
                errors.append('password2 is diff password ')


        if account is not None and password is not None and password2 is not None and email is not None and CompareFlag :
            user=User.objects.create_user(account,email,password)
            user.is_active=True
            user.save
            return HttpResponseRedirect('/account/login')


    return render_to_response('account/register.html', {'errors': errors})

def alogout(request):
    logout(request)
    return HttpResponseRedirect('/index')


從以上的代碼中,咱們是在template裏建立的form。

在templates下建立account目錄。在下面建立login.html

<!DOCTYPE html>
<html>
<head>
    <title>Welcome login </title>
</head>
<body>
    <p>Account Login </p>

    {% if errors %}
        <li>
            {% for error in errors %}
             <p style="color: red;">
                Please correct the error: {{error}} below.
             </p>
              {% endfor %}
        </li>
    {% endif %}

    <form action="" method="post">
        <input type = 'text' placeholder="Please input account" name="account">
       <br>

        <input type = 'password' placeholder="Please input password" name="password">
        <br>
        <input type = 'submit' placeholder="Login" value="Login">
        <br>
        <a href="/account/register">register new accout</a>
    </form>
</body>
</html>

一樣的方式建立register.html

<html>
<head>
    <title>Welcome Register New Account</title>
</head>
<body>

 {% if errors %}
        <li>

            {% for error in errors %}
             <p style="color: red;">
                Please correct the error: {{error}} below.
             </p>
              {% endfor %}
        </li>
    {% endif %}
<table>
    <form action="" method="post">
        <tr>
            <td>
                <label >Account:</label>
            </td>
            <td>
                <input type = 'text' placeholder="Please input account" name = 'account'>
            </td>
        </tr>
        <tr>
            <td>
                <label >Password:</label>
            </td>
            <td>
              <input type = 'password' placeholder="Please input password" name = 'password'>
            </td>
        </tr>
         <tr>
             <td>
                <label >Password:</label>
             </td>
             <td>
                 <input type = 'password' placeholder="Please input password" name ='password2'>
             </td>

         </tr>
         <tr>
             <td>
                 <label>email:</label>
             </td>
             <td>
                 <input type="email" placeholder="Please input email" name = 'email'>
             </td>
         </tr>
          <tr>

              <td>
                   <input type = 'submit' placeholder="Login" value="Login">
              </td>
          </tr>
    </form>
</table>
</body>
</html>

接下來view和template建立好了,只有牀urls的映射關係啦。

url(r'^account/login/$', alogin),
    url(r'^account/register/$', register),
    url(r'^account/logout/$', alogout),

ok到此爲止,用戶的註冊和登陸就能夠在在瀏覽器上看到效果啦。

相關文章
相關標籤/搜索