Python打造線上教學平臺學習——學習週報3
阿新 • • 發佈:2018-12-30
業務邏輯開發
—————— 學習週報 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>用 戶 名</label>
<input name="username" id="account_l" type="text" placeholder="手機號/郵箱" />
</div>
<div class="form-group marb8 {% if login_form.errors.username %}earrorput{% endif %}">
<label>密 碼</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)
- 模組繼承
- 課程機構列表頁資料展示
- 列表分頁功能
- 列表篩選功能