三大组成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") # 定向到外部百度页面