>[success] # 用來處理用戶信息
~~~
1.用來保存當前訪問 用戶的session = {}
2.random_str 生成隨機的sessionid
3.template 讀取html文件
4.current_user 判斷用戶是否登錄
5.route_index 請求頭+body + username判斷+響應返回
6.response_with_headers 定制響應頭
7.route_login 處理用戶登錄
8.route_register 用戶注冊
~~~
>[danger] ##### 代碼
~~~
import random
from models import User
from utils import log
from utils import template
# 這個函數用來保存所有的 messages
message_list = []
# 用來保存當前訪問 用戶的session
session = {}
# 生成一個加密 session id
def random_str():
seed = 'abcdefjsad89234hdsfkljasdkjghigaksldf89weru'
s = ''
for i in range(16):
random_index = random.randint(0, len(seed) - 2)
s += seed[random_index]
return s
def current_user(request):
'''
獲取cookies中保存的sessionid 然后從字典中匹配對應的信息
'''
session_id = request.cookies.get('user', '')
username = session.get(session_id, '游客')
if username is not "游客":
username = User.find(username).username
return username
def route_index(request):
"""
主頁的處理函數, 返回主頁的響應
請求頭+body + username判斷+響應返回
"""
header = 'HTTP/1.1 210 VERY OK\r\nContent-Type: text/html\r\n'
body = template('index.html')
username = current_user(request)
body = body.replace('{{username}}', username)
r = header + '\r\n' + body
return r.encode(encoding='utf-8')
# 定制響應頭
def response_with_headers(headers, status_code=200):
"""
Content-Type: text/html
Set-Cookie: user=gua
"""
header = 'HTTP/1.1 {} VERY OK\r\n'.format(status_code)
header += ''.join(['{}: {}\r\n'.format(k, v)
for k, v in headers.items()])
return header
def redirect(location, headers=None):
if headers is None:
headers = {
'Content-Type': 'text/html',
}
headers['Location'] = location
# 302 狀態碼的含義, Location 的作用
header = response_with_headers(headers, 302)
r = header + '\r\n' + ''
return r.encode(encoding='utf-8')
def route_login(request):
headers = {
'Content-Type': 'text/html',
}
username = current_user(request)
if request.method == "POST":
# 獲取所有post 請求的參數
form = request.form()
# 調用 User 函數
u = User(form)
if u.validate_login():
# 查詢用戶名密碼是否存在
user = User.find_by(username=u.username)
session_id = random_str()
session[session_id] = user.id
log('userid',user.id)
headers['Set-Cookie'] = 'user={}'.format(session_id)
# headers['Set-Cookie'] = 'user_id={}'.format(user.id)
result = '登錄成功'
log('headers response', headers)
return redirect('/', headers)
else:
result = '用戶名或者密碼錯誤'
else:
result = ''
body = template('login.html',username = username)
header = response_with_headers(headers)
r = header + '\r\n' + body
# log('login', r)
return r.encode(encoding='utf-8')
def route_register(request):
"""
注冊頁面的路由函數
"""
header = 'HTTP/1.1 210 VERY OK\r\nContent-Type: text/html\r\n'
if request.method == 'POST':
form = request.form()
u = User(form)
if u.validate_register():
u.save()
result = '注冊成功<br> <pre>{}</pre>'.format(User.all())
else:
result = '用戶名或者密碼長度必須大于2'
else:
result = ''
body = template('register.html')
body = body.replace('{{result}}', result)
r = header + '\r\n' + body
return r.encode(encoding='utf-8')
def route_static(request):
"""
靜態資源的處理函數, 讀取圖片并生成響應返回
"""
filename = request.query.get('file', 'doge.gif')
path = 'static/' + filename
with open(path, 'rb') as f:
header = b'HTTP/1.1 200 OK\r\nContent-Type: image/gif\r\n\r\n'
img = header + f.read()
return img
route_dict = {
'/': route_index,
'/login': route_login,
'/register': route_register,
}
~~~
- 網絡原理
- 為搭建框架做準備
- 簡單認識網路
- 自定義模擬網站案例
- 優化最終框架
- 數據存儲 -- data
- 用戶個人信息存儲 -- User.txt
- 路由映射 -- routes
- 處理用戶信息 -- routes_static.py
- 保存靜態文件 -- static
- templates -- html 集中處理模塊
- 首頁 -- index.html
- 登陸 -- login.html
- 用戶注冊頁面 -- register
- 日志模塊 -- log.gua.txt
- 啟動文件--server.py
- orm處理 -- model.py
- 日志模塊 -- utils.py
- 兩種數據庫類型
- 傳統數據庫了解篇
- 前端快速入門
- JS簡單使用入門
- css簡單快速入門
- DJANGO
- virtualenv-創建虛擬環境
- 項目結構
- django-admin中文配置
- django-打印sql語句
- django-基礎
- 認識MVC和MTV
- Django--初識
- Django--初識案例
- Django-FBV/CBV
- Django--常用input 交互
- Django-url
- Django-url.py 配置
- Django-include 使用
- Django-url name
- Django-ORM
- ORM-數據庫配置
- ORM-model字段
- ORM-model字段解釋
- ORM-字段選項
- ORM-查詢
- ORM-四種常用查詢方法
- ORM-三種獲取數據
- ORM-其他查詢方式
- ORM-條件查詢雙線
- ORM-Q和F條件使用
- ORM-三種數據庫交互
- 案例 -- 一對多
- ORM-技巧/常見問題
- ORM-N+1 問題
- ORM-并發的處理
- ORM-數量查詢、
- ORM-正向反向查詢
- ORM-基礎案例一
- ORM-基礎一對多案例
- Django-templates
- Django-模板的繼承
- Django-模板的過濾
- Django-自定義模板的過濾
- Django-cookie
- Django-cookies 裝飾器
- Djang-session
- Django-CSRF
- Django-中間件 -- 后續了解
- Django- 緩存 -- 沒有深入了解
- Django-form
- From-ajax
- form-內部驗證處理
- form-屬性
- form-常用的標簽字段
- form-常用的下拉和選擇
- form-widget速查
- Django-ajax序列化
- Django-多種ajax寫法
- ajax-原生寫法
- ajax-$寫法
- ajax-ifram
- Django-ajax圖片上傳
- ajax-原始寫法
- ajax-正常寫法
- iframe+form
- 實戰寫法
- Django-常用自編寫組件
- Django-雙菜單組合搜索
- Django - 多菜單組合搜索
- Django-分頁
- django-綜合基礎
- 綜合基礎-render
- django-admin
- admin-頁面配置
- admin-字段配置
- admin-編輯頁面
- admin-forms驗證
- admin-創建抽象類
- django-驗證碼
- 驗證碼-第三方生成庫
- 驗證碼-view.py使用
- 驗證碼-注意引入Monaco.ttf
- django-用戶注冊
- 注冊-form 模塊
- 注冊-views 模塊
- 注冊-html模塊
- 注冊-model模塊
- django-用戶登錄三種
- session登錄
- form-session 寫法
- view-寫法
- Html-寫法
- model-寫法
- 繼承類登錄
- 外鍵關聯登錄
- django-簡單的student 管理案例
- app-urls.py
- app-models.py配置
- admin-admin.py配置
- app-form.py 和數據庫關聯的寫法
- app-FBV_views.py
- app-CBV_views.py
- templates-index.html
- django-博客系統
- APP目錄-models.py 創建
- APP目錄-基礎展示數據分析
- APP目錄-基礎數據展示cls
- ListView
- DetailView
- FormView
- 額外功能拓建
- 添加文章搜索/用戶文章查詢功能
- 增加一個友情鏈接
- 增加一個評論模塊
- App-利用Bootstrap4 搭建樣式
- 項目crm
- 思維導圖
- perfectCRM-項目名字
- settings.py-配置
- view.py-登陸/登出函數
- crm-app文件
- model.py-表的創建
- admin.py-注冊后臺
- view.py-視圖層
- static-靜態文件
- css
- bootstrap.min.css
- dashboard.css
- ie10-viewport-bug-workaround.css
- signin.css
- fonts
- imgs
- js
- jquery.js
- bootstrap.min.js
- holeder.js
- ie10-viewport-bug-workaround.js
- ie-emulation-modes-warning.js
- plugins
- html模板文件-templates
- crm
- index.html-首頁模板