s11day97前端
1. 爲何要作先後端分離?vue
- 先後端交給不一樣的人來編寫,職責劃分明確。react
- API (IOS,安卓,PC,微信小程序...)ios
- vue.js等框架編寫前端時,會比以前寫jQuery更簡單快捷。web
2. 對於後端人員,主要爲前端提供:API(接口)redis
之前的你的接口:vuex
http://127.0.0.1:8000/index/django
http://127.0.0.1:8000/users/編程
http://127.0.0.1:8000/add_users/json
http://127.0.0.1:8000/del_users/
http://127.0.0.1:8000/edit_users/
restful 規範:
http://127.0.0.1:8000/users/
3. 談談你對restful規範的理解?
1. 使用https代替http
https://www.luffycity.com/course/detail/web/3
http://www.luffycity.com/course/detail/web/3
2. 在URL中體現本身寫的是API
https://www.luffycity.com/api/
https://api.luffycity.com/ 可能會跨域
3. 在URL中體現版本
https://www.luffycity.com/api/v1/users
https://www.luffycity.com/api/v2/users
4. 名詞(面向資源編程)
https://www.luffycity.com/api/v1/users
https://www.luffycity.com/api/v1/song
5. 行爲
https://www.luffycity.com/api/v1/users
method:
get,獲取
post,新建
put,更新
patch,局部更新
delete,刪除
6. 條件
https://www.luffycity.com/api/v1/users?page=1
https://www.luffycity.com/api/v1/users?page=1&gender=2
7. 狀態碼
200
301
302
404
500
推薦使用code:
def xx(request):
ret = {'code':1000,'data':None}
try:
...
except Exptions as e:
ret['status'] = 1001
ret['error'] = 'xxxx錯誤'
return JsonResponse(ret)
8. 錯誤信息
{
code:10001,
error:'用戶名或密碼錯誤'
}
9. 返回結果:
GET:
https://www.luffycity.com/api/v1/users
響應:
{
code: 1000,
data: [
{'name':'趙森','age':19},
{'name':'趙雲','age':16},
{'name':'趙雲','age':16},
{'name':'趙雲','age':16},
{'name':'趙雲','age':16},
]
}
GET:
https://www.luffycity.com/api/v1/users/1/
響應:
{
code:1000,
data:{'name':'趙森','age':19},
}
POST:
https://www.luffycity.com/api/v1/users
請求體:
{'name':'大表哥','age':19}
響應(不要):
{
code:1000,
data:{'id':9, 'name':'大表哥','age':19}
}
PUT/PATCH:
https://www.luffycity.com/api/v1/users
請求體:
{'name':'大表哥','age':19}
響應(不要):
{
code:1000,
data:{'id':9, 'name':'大表哥','age':19}
}
DELETE:
...
10. hyper link
訪問:https://www.luffycity.com/api/v1/users
{
code:1000,
data:[
{'id':1,'name':'趙森','age':19, 'depart':https://www.luffycity.com/api/v1/depart/1/},
{'id':1,'name':'趙森','age':19, 'depart':https://www.luffycity.com/api/v1/depart/1/},
{'id':1,'name':'趙森','age':19, 'depart':https://www.luffycity.com/api/v1/depart/1/},
{'id':1,'name':'趙森','age':19, 'depart':https://www.luffycity.com/api/v1/depart/1/},
{'id':1,'name':'趙森','age':19, 'depart':https://www.luffycity.com/api/v1/depart/1/},
]
}
https://www.luffycity.com/api/v1/users
{
code:1000,
data:[
{'id':1,'name':'趙森','age':19, 'depart_title':'公關部'},
{'id':1,'name':'趙森','age':19, 'depart_title':'公關部'},
{'id':1,'name':'趙森','age':19, 'depart_title':'公關部'},
{'id':1,'name':'趙森','age':19, 'depart_title':'公關部'},
{'id':1,'name':'趙森','age':19, 'depart_title':'公關部'},
]
}
4. django rest framework框架的做用?
幫助開發者能夠快速開發出遵循restful規範的API
5. django rest framework框架都有哪些組件(10)?
版本【1】
權限
認證
節流
分頁【2】
解析器【3】 ****
序列化 *****
視圖 ****
路由
渲染器【4】
項目架構:
- 主站,學生使用;(vue.js + rest framework)
- 導師後臺,導師使用;
- 管理後臺,運營使用;
開發人員:
主站:
- 前端:
- 前端姑娘 v1,vue.js 1.0
- 前端姑娘 v2,vue.js 2.0
- 後端:
- 老村長
- 產品經理
- alex/我/文周
導師: 1人
管理後臺:1人 + 兼職導師
2. ContentType
- http請求頭
現象:reqeust.POST中未獲取到數據。
a. 老闆數據無法來
b. 本身
request.POST
requset.boy
Content-Type請求頭的做用?
用於標記請求體數據的格式,如:
1. Content-Type:application/x-www-form-urlencoded
請求體:b'pwd=123&user=root'
2. Content-Type:application/json
請求體:{"pwd": 123, "user": "root"}
s11day98
內容回顧:
1. 爲何要作先後端分離?
2. 簡述http協議?
- 基於socket
- 數據格式:
"GET /index?name=123&age=19 http1.1\r\nhost:www.luffyciti.com\r\ncontent-type:application/json...\r\n\r\n"
"POST /index http1.1\r\nhost:www.luffyciti.com\r\ncontent-type:application/json...\r\n\r\n{name:'alex',age:18}"
"POST /index http1.1\r\nhost:www.luffyciti.com\r\ncontent-type:application/enform.....\r\n\r\nname=alex&age=18&xx=19"
- 無狀態短連接
一次請求一次響應以後斷開鏈接
3. 簡述restful 規範?
https://www.luffycity.com/api/v1/courses/?sub_category=0
4. django rest framework組件的做用?
5. 列舉django rest framework組件(10)?
6. 路飛的表結構
s11day99
內容回顧:
1. 爲何作先後端分離?
2. rest framework做用?
3. 簡述Http協議?
4. 列舉rest framework組件?
5. restful 規範?
6. content-type請起頭的做用?
用於告知服務端,客戶端發送的請求體數據格式。
Content-Typeapplication/x-www-form-urlencoded:
請求體格式:phone=8615131255555&password=asdfasdfasdf&oneMonth=1
Content-Type: application/json;charset=UTF-8
請求體格式:{"BaseRequest":{"Uin":981579400,"Sid":"h9kV51dfCuwJy9SX","Skey":"@crypt_2ccf8ab9_edc3756c6a6adef29051ab1ae52c6cb6","DeviceID":"e037891563571357"},"Msg":{"Type":1,"Content":"test","FromUserName":"@3fd34d9c325790b34948028adc36a31f","ToUserName":"@6ba3ce1e58cfb403c9adaf8053e82e79","LocalID":"15336944955110060","ClientMsgId":"15336944955110060"},"Scene":0}
擴展:user-agent請求頭?
7. django content-type組件的做用?
解決一張表和多張表作FK關聯的問題。
8. 哪裏使用過面向對象的封裝?
class BaseRequest(object):
def __init__(self):
self.code = ..
self.data =
self.error = ...
...
def dict()
obj = BaseRequest()
obj.__dict__
9. 視圖要寫
- try
- 註釋
- 建明之一
10. ORM
a. FK正向和反向操做
class A:
name = ..;.
clas B:
a = FK(A,related_name='xxxx')
title = ...
class C:
a = FK(A)
age = ...
b. O2O的正向和反向操做
class A:
name = ..;.
class B:
a = O2O(A)
age = ...
c. 補充:models.User.objects.filter(xx__isnull=True)
class 部門用戶表:
title = ..;.
clas 用戶表:
p = FK(A,related_name='xxxx')
name = ...
modes.用戶表.objects.filter('name','p__title')
modes.部門用戶表.objects.filter('title','用戶表__name',表__isnull=False)
注意:
1. left join和inner join的區別?
2. left join是表在前和在後請求不同?
s11day100
內容回顧:
1. django請求生命週期?
#- wsgi #- 中間件 #- 路由 #- 視圖 #- ORM #- 模板渲染
2. django提供的功能
#- 必備 #- 路由 #- 視圖 #- 模板渲染
- django:
#- ORM: #... #... #- 分頁 #- Form & ModelForm #- admin #- auth #- session #- 中間件 #- contenttype #- csrf #- 緩存(速度塊)
3. restful
#- restful 規範 #- django rest framwork #- 其餘 #- 跨域
a. 爲何出現跨域?
b. 如何解決跨域?
#使用cors,即:設置響應頭。 #簡單請求: #響應頭中設置一個容許域名訪問 #複雜請求: #OPTIONS請求作預檢,容許特殊請求方式和請求頭 + 容許域名訪問。 #真正請求就能夠發送過來進行處理 + 容許域名訪問。
c. 跨域
#www.baidu.com / www.luffycity.com #www.baidu.com / api.luffycity.com #www.baidu.com:8001 / www.baidu.com:8002
d. 路飛線上代碼無跨域(項目部署時,放在同一處)
- vue.js
- 前端三大框架:
#react.js /angular.js / vue.js vue.js 2版本
- 組件:
#- axios #- vuex #- router
- 你以爲vue和jQuery的區別?
#- 雙向綁定 #- 單頁面應用
內容詳細:
1. redis字典
#- 安裝redis,在內存中進行存取數據。 #- 啓動redis服務 #redis-server
- 虛擬機問題:
#1. 網卡鏈接方式橋接 #2. iptables 關閉 #service iptables stop #3. 修改redis配置文件 #vim /etc/redis.conf
- 初始redis
a. redis至關因而一個在內存中建立的大字典。 b. redis的value有5大數據類型: #- 字符串 #import redis #conn = redis.Redis(host='192.168.11.61',port=6379) # 設置值 #conn.set('wupeiqi_name','於超') # 獲取值 #val = conn.get('wupeiqi_name').decode('utf-8') #print(val) #- 列表 #- 集合 #- 有序集合 #- 字典
2. 購物車邏輯
問題:
a. 爲何要把購物車信息放到redis中?
#- 查詢頻繁 #- 課程是否存在? #- 價格策略是否合法? #- 中間狀態 #- 購買成功以後,須要刪除。 #- 購物車信息刪除
b. 購物車有沒有數量限制?
#使用 keys 查看個數作判斷
c. 購物車的結構
#redis = { #shopping_car_用戶ID_課程ID:{ #id:'課程ID', #name:'課程名稱', #img:'課程圖片', #default_price_id:'默認價格ID', #price_policy_dict:{ #1: {...}, #5: {...}, #} #} #}
總結:
a. 五大數據類型
b. 列舉每種數據類型的操做
#字符串: #set #get #字典: #get #hgetall #set #hmset #hdel #其餘: #delete #expire #keys #flushall()