三大組成html
socket部份前端
後端接收到的web請求結構python
請求首行 b'GET /請求功能 HTTP/1.1\r\n 請求頭 Host: 127.0.0.1:8080\r\n Connection: keep-alive\r\n Cache-Control: max-age=0\r\n Upgrade-Insecure-Requests: 1\r\n User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36\r\n Sec-Fetch-User: ?1\r\n Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3\r\n Sec-Fetch-Site: none\r\n Sec-Fetch-Mode: navigate\r\n Accept-Encoding: gzip, deflate, br\r\n Accept-Language: zh-CN,zh;q=0.9\r\n Cookie: csrftoken=aOZSalMQkKGbzstfjcw3O9sDoegdywL8AD7PzhidAyx3tXShN7oQtxN1MMnS6GVX\r\n \r\n(******) 請求體
接收到後對數據進行處理,獲得須要的數據如請求功能web
再根據功能分派不一樣的頁面返回給瀏覽器數據庫
路由配置;經過鍵值對或元組的形勢將路由和功能函數對應起來django
模版語法flask
用來處理後端數據與html頁面的交互後端
jinja2(語法極其貼近後端python語法)可以在html頁面上來操做後端傳遞過來的數據瀏覽器
<p>{{ userDic }}</p> <p>{{ userDic.username }}</p> <p>{{ userDic['age'] }}</p> <p>{{ userDic.get('hobby') }}</p> <p>{{ userDic.get('hobby').0 }}</p> <p>{{ userDic.get('hobby').1 }}</p> <p>{{ userDic.get('hobby').2 }}</p> {% for user_dic in user_list %} <!--jinja2的for循環--> <tr> <td>{{ user_dic.id }}</td> <td>{{ user_dic.username }}</td> <td>{{ user_dic.password }}</td> </tr> {% endfor %} <!--須要添加for循環終止--> <!-- 模版的渲染。動態添加的數據是在後端處理生成的一個完整的html的過程 渲染是在後端完成的,與前端無關(如表格的生成等。。。。) -->
django項目同名文件夾下服務器
app文件夾下
manage.py;django的入口文件
templates文件夾
用來存儲html頁面,終端建立任務須要手動添加改文件夾並在settings文件下書寫路徑
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')]//添加路徑 , 'APP_DIRS': True,
from django.shortcuts import render,HttpResponse,redirect
HttpResponse;返回字符串
def index(request): return HttpResponse("一串字符串")
render;返回html文件
def login(requset): user_dic = {"username": "jason", "password": "123456"} return render(requset, "login.html", {'xxx':user_dic}) # 將dic傳入html # django的模版語法字典只支持對象.屬性的方式
redirect;重定向
def home(requset): return redirect("/login") # 定向到本地login頁面 return redirect("https://www.baidu.com") # 定向到外部百度頁面