1. 程式人生 > >Python打造線上教學平臺學習——學習週報3

Python打造線上教學平臺學習——學習週報3

業務邏輯開發

		                                 ——————  學習週報 2018.11.25


本週計劃:

  • 完成課程第6章的學習
  • 複習第4,5章知識
  • 複習HTML知識

完成情況:

  • 第6章
  • 1.使用者登入
  • 2.form實現登入
  • 3.session和cookie自動登入機制
  • 4.使用者註冊


展示:

1、使用者登入

  • 錯誤1: login() 1個argment,因為給了2個
    在這裡插入圖片描述原因:在view.py中定義的函式名是login,在其中用函式時也用到了login(),兩個login()的引數個數不一樣
    解決: 更改第一個login的函式名
    在這裡插入圖片描述

  • 錯誤2: 403
    在這裡插入圖片描述原因:Django的安全機制,防止跨域提交攻擊。
    解決:login.html 的form之前加{% csrf_token %}

  • 並級:
    from django.db.models import Q
    用法:Q( )

  • 在登入時,如果使用者名稱或者密碼輸入錯誤時,給出一個提示:
    在這裡插入圖片描述
    實現簡單:傳一個引數即可 在我的程式碼中傳 msg

  • 基於類來實現view.py:這樣有很多好處。

  • 使用類來實現登入

from django.views.generic.base import View

class LoginView(View):
	def get(self, request):
		return render(request, "login.html", {})
	def post(self, request):
		user_name = request.POST.get("username", "")
		pass_word = request.POST.get("password", "")
		user = authenticate(username=user_name, password=pass_word)
		if user is not None:
			login(request, user)
			return render(request, "index.html")
		else:
			return render(request, "login.html", {"msg": "使用者名稱或密碼錯誤!"})

2、用form實現登入

  • 通過form來驗證引數是否正確,比如說最大長度、是否為空。他是自動實現,這樣為我們減省了很多程式碼。
  • user中建立forms.py檔案
from django import forms

class LoginForm(forms.Form):
    username = forms.CharField(required=True)
    password = forms.CharField(required=True, min_length=5)
  • 在登入時如果有錯誤,將錯誤在頁面顯示出來:
    在login.html中進行更改:
<div class="fl form-box">
<h2>帳號登入</h2>
                <form action="/login/" method="post" autocomplete="off">
                    <div class="form-group marb20 {% if login_form.errors.username %}earrorput{% endif %}">
                        <label>用&nbsp;戶&nbsp;名</label>
                        <input name="username" id="account_l" type="text" placeholder="手機號/郵箱" />
                    </div>
                    <div class="form-group marb8 {% if login_form.errors.username %}earrorput{% endif %}">
                        <label>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;碼</label>
                        <input name="password" id="password_l" type="password" placeholder="請輸入您的密碼" />
                    </div>
                    <div class="error btns login-form-tips" id="jsLoginTips">{% for key,error in login_form.errors.items %}{{ key }}:{{ error }}{% endfor %}{{ msg }}</div>
                     <div class="auto-box marb38">

                        <a class="fr" href="forgetpwd.html">忘記密碼?</a>
                     </div>
                     <input class="btn btn-green" id="jsLoginBtn" type="submit" value="立即登入 > " />
                {% csrf_token %}
                </form>
                <p class="form-p">沒有慕學線上網帳號?<a href="register.html">[立即註冊]</a></p>
            </div>

結果:
測試例子:當不輸入使用者名稱和密碼時:
在這裡插入圖片描述

3.session和cookie自動登入機制

  • 理解cookie和sessuon的知識連結:知識點連結
  • 無狀態請求:
    在這裡插入圖片描述
  • 有狀態請求:
    在這裡插入圖片描述
  • cookies:有安全隱患,不能把使用者所有資訊都存在本地,這樣很不安全,容易被別人竊取,知道使用者名稱和密碼,是本地的一種行為。基於這種考慮,就產生了session機制。
  • session:可對使用者資訊進行加密,加密後的使用者資訊是有儲存時間限制的。
  • Django利用cokies和sessiond機制,實現了自動登入。
  • Django中實現sessiond的機制(預設是配置好的):
    在這裡插入圖片描述
    如果註釋掉,自動登入將失效。

4.使用者註冊

  • 將註冊頁面檔案register.html檔案拷入templates
  • 編寫view:
class RegisterView(View):
    def get(self, request):
        return render(request, "register.html", {})
  • 配置url:
from users.views import RegisterView

 url('^register/$', RegisterView.as_view(), name="register")
  • 配置register.html,實現首頁點“註冊”時向註冊頁面的跳轉。
 <a style="color:white" class="fr registerbtn" href="{% url 'register' %}">註冊</a>
  • 結果:
    在這裡插入圖片描述

專門做驗證碼的開發庫: django captcha

+  地址:[連結](https://github.com/mbi/django-simple-captcha)
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20181125121605233.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDgyNDkxMw==,size_16,color_FFFFFF,t_70)
#### 安裝教程:[連結](https://django-simple-captcha.readthedocs.io/en/latest/usage.html#installation)

在這裡插入圖片描述
1、pip install django-simple-captcha
在這裡插入圖片描述2、加入url: url(r'^captcha/', include('captcha.urls')),
3、makemigrations:
在這裡插入圖片描述在這裡插入圖片描述
4、form表單中:

from captcha.fields import CaptchaField

class RegisterForm(forms.Form):
    email = forms.EmailField(required=True)
    password = forms.CharField(required=True, min_length=5)
    captcha = CaptchaField(error_messages={"invalid": u"驗證碼錯誤"})

5、驗證碼實現:
在這裡插入圖片描述
在後臺數據庫也會相應產生驗證碼:
在這裡插入圖片描述實現時會自動進行比對查詢。

  • 生成隨機驗證碼:(email_send.py中)
from random import Random

def random_str(randomlength=8):
    str = ''
    chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
    length = len(chars) - 1
    random = Random()
    for i in range(randomlength):
        str+=chars[random.randint(0, length)]
    return str

6.郵箱註冊成功:
賬戶:[email protected]
密碼: admin123
後臺資料庫成功記錄該賬戶資訊:
在這裡插入圖片描述
7.註冊時檢測使用者是否已經註冊:

  • 如果已經註冊,顯示:“使用者已經存在!”
    在這裡插入圖片描述

下週任務:

下週考試多多,任務安裝較少。

  • 完成第6章剩餘的——密碼找回
  • 完成第7章—— 課程機構功能實現(7-1 ------- 7-6)
    • 模組繼承
    • 課程機構列表頁資料展示
    • 列表分頁功能
    • 列表篩選功能