天天看點

Django個人部落格搭建--7--注冊與登入

前言:

    • 注冊:
      • 1.寫一個存儲使用者資訊的表
      • 2.先編寫注冊界面模闆
      • 3.當我們給模闆配置好路由之後,在視圖函數處編寫功能函數。
    • 登入:
      • 1.模闆
      • 2.寫視圖函數

要知道如何用django寫出使用者注冊登入的代碼,首先需要知道注冊登入的原理,這裡拿 最簡單的注冊登入方式來解釋

1.注冊

簡單來說,注冊就是把資料寫入資料庫

  1. 輸入使用者名,密碼,确認密碼
  2. 一般情況下,如果密碼和确認密碼一樣,則把使用者名和密碼存入資料庫
  3. 但是這裡我們需要驗證一下使用者名是否已經在資料庫中存在,如果存在則跳回頁面重新注冊,如果不存在則確定兩次輸入的密碼一緻,然後存入資料庫

2.登入

登入可以了解為把資料庫裡的資料拿出來顯示

  1. 輸入使用者名,密碼
  2. 如果使用者名在資料庫中存在,則判斷密碼是否一緻
  3. 如果使用者名在資料庫中不存在,則跳回頁面

注冊:

我的首頁導覽列有一個登入按鈕,點進去到達登入界面,可選擇注冊或者放棄登入:

Django個人部落格搭建--7--注冊與登入

這是我的注冊頁面

1.寫一個存儲使用者資訊的表

可以根據自己需求喜好,決定是否建立新的app,我這裡是新建立了一個app,然後在model.py裡寫了一個簡單的模型

Django個人部落格搭建--7--注冊與登入

playObj = PlayerManager()

是注冊自定義管理器,下面會說到

2.先編寫注冊界面模闆

<form class="form-horizontal" role="form" action="{% url 'iyonghu:zhuce' %}" method="post" style="margin-top: 5%">
        {% csrf_token %}
        <div class="form-group">
            <label class="col-sm-3 control-label">使用者名:</label>
            <div class="col-sm-9">
                <input type="text" placeholder="name" name="usersname">
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-3 control-label">密碼:</label>
            <div class="col-sm-9">
                <input type="password" placeholder="password" name="passsword">
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-3 control-label">确認密碼:</label>
            <div class="col-sm-9">
                <input type="password" placeholder="again" name="again">
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-offset-3 col-sm-9">
                <button type="submit" class="btn btn-primary">确認注冊</button>
                <a href="{% url 'shouye' %}" style="margin-left: 5%">放棄</a>
            </div>
            <div class="col-sm-offset-3 col-sm-9">
                <p style="color: red">{{ p }}</p>
            </div>
        </div>
    </form>
           

重點是這三個地方:

Django個人部落格搭建--7--注冊與登入

這是一個form表單,通過

method=‘post’

把畫圈這三個name所帶的資料通過比較安全的方式發送出去。

3.當我們給模闆配置好路由之後,在視圖函數處編寫功能函數。

def zhuce(request):
    if request.method == 'POST':
        username = request.POST.get('usersname')
        password = request.POST.get('passsword')
        again = request.POST.get('again')
        get_info = Player.playObj.filter(username=username)
        if get_info.exists():
            p = '使用者名已存在,請重新輸入!'
            return render(request,'blogmuban/regsite.html',{'p':p})
        else:
            if password == again:
                user = Player.playObj.createnew(name=username,word=password)
                user.save()
                p = '注冊成功,登入吧!'
            else:
                p = '注冊失敗,兩次密碼輸入不一樣!'
                return render(request,'blogmuban/regsite.html',{'p':p})
    return render(request,'blogmuban/login.html',{'p':p})

           

如果背景收到的request.method是POST的話,說明沒有異常,則執行下面的代碼:

把從前端收到的資料分别指派。

Django個人部落格搭建--7--注冊與登入

這裡是從資料庫找與前端輸入的相同的資料,playObj是自己在model寫的一個自定義管理器,就是自定義一個功能

class PlayerManager(models.Manager):
    def createnew(self,name,word):
        play = self.model()
        play.username = name
        play.password = word
        return play
           

這裡是自定義一個往資料庫插入資料的功能

上面的filter函數是django自帶的一個篩選功能,可以将key=value的值篩選出來

然後我們把拿到的資料複制給get_info,再判斷他是否存在,如果存在則判斷密碼和确認密碼是否相同。

如果這些驗證都通過了,則調用自定義管理器剛寫的建立新對象的功能,然後将資料存入資料庫

自此,資料庫裡面便有了我們剛剛輸入的資料,代表我們注冊成功!

登入:

1.模闆

登入的模闆的道理跟注冊的模闆一樣,隻是少掉确認密碼而已,不過要有也可以,隻要在後面加一個判斷功能就行了

2.寫視圖函數

def login(request):
    username = request.POST.get('username')
    password = request.POST.get('password')
    if request.method == 'POST':
        user = Player.playObj.filter(username=username)
        if user.exists():
            if user[0].password == password:
                request.session['name'] = username
                request.session['word'] = password
            else:
                p = '密碼錯誤,請重新輸入!'
                return render(request, 'blogmuban/login.html',{'p':p})
        else:
            p = '使用者名有誤,請重新輸入!'
            return render(request, 'blogmuban/login.html', {'p': p})
    return redirect('/')
           

還是一樣,将前端拿到的資料進行指派

利用filter方法周遊出

username=username

的對象清單指派給user,由于這裡得到的是一個清單是以我們用

user[0].password == password

來判斷

這樣子如果一切都驗證通過,就把這些值交給緩存session,這樣子友善我們前台調用,最後重定向到首頁

如果我們想在首頁看到我們剛剛存入個session,可以這樣子寫:

在首頁視圖函數那裡加一條

這樣如果name有值那就賦給denglu,如果沒有就把‘遊客’賦給denglu

然後傳給前台在模闆中使用,就可以看到啦

Django個人部落格搭建--7--注冊與登入
Django個人部落格搭建--7--注冊與登入

如圖為登入和未登入的狀态,後期如果想得到使用者的其他資訊,比如評論,文章什麼的,隻需要用這個session去取資料就行啦!