在搭建網站和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給用戶發送電子郵件,用 DEFAULT_FROM_EMAIL 的設 置做爲發件人。也能夠用第3個參數 from_email 來 覆蓋設置。
email_user(subj, msg)
1.3;建立User用戶
使用 create_user 輔助函數建立用戶:
from django.contrib.auth.models import User
user = User.objects.create_user(username='',password='',email='')
user.save 注意這裏不是save()!
mvc1.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')
經過上面的基礎知識,咱們已經瞭解如何建立和更新一個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到此爲止,用戶的註冊和登陸就能夠在在瀏覽器上看到效果啦。