手撸 简易版web框架 获取静态网页 import socket sever=socket.socket() sever.bind(('127.0.0.1',8080)) sever.listen(5) while True: conn,addr=sever.accept() while True: deta=conn.recv(1024) print(deta) conn.send(b'HTTP/1.1 200 OK\r\n\r\n') with open('login.html','r',encoding='utf-8')as f: for line in f: conn.send(line.encode('utf-8')) conn.close()
推导DJango 思路; 第一步;手撸一个服务器,让浏览器来访问自己手撸的服务器 第二步;浏览器无法识别服务器发送出去的信息,因为不是HTTP协议 第三步;给发送出去的东西写在一个html文件中,在引用,添加HTTP格式发送 第四步;浏览器展示我们发送的数据 第5步;我们将浏览器发过来的请求打印出来 请求首行 b'GET / HTTP/1.1\r\n 请求头(一堆k,v键值对)\r\n r\n 请求体(post请求携带的数据) 第5步,我们对请求数据格式切分处理,拿到输入网址的那个英文单词if 判断 从而实现了根据浏览器的请求不同,来反映不同的数据
第6步;我们导入一个wsgiref模块,他的作用就是帮我们写socked,还有处理 HTTP请求的数据,run函数的那个env就是处理好的HTTP数据,{k,v}形式 从而我们可以通过env里的PATH-INFO来获取请求的那个英文单词 第7步,根据拿到的那个因为后缀,我们可以定义一个映射关系,将后缀与函数一一对应,命名为 urls,请求后缀与函数的对应 第8步,实现了路由与视图函数匹配,意味着不同请求,返回不同的页面 第9步,我们把时间发送给浏览器,先在HTML写一个@@,然后读出来,在将时间替换@@ 这样我们就把时间发给了浏览器 第10步,但是这种方法无法实现点取值的效果,后来我们采用了一个jianja2来实现模板渲染 使得前后端数据交互更加方便,如果继续用替换数据交互局限性很大我们将后端生成的数据 直接传给前端页面使用,并且前端页面可以灵活的操作数据,就是数据类型没有改变,我么们c 称之为模板渲染 模板渲染 将字典传递给前端页面,前端通过变量名获取字典,再对数据操作 在发给浏览器,模板渲染不仅可以渲染后端的数据,还可以渲染数据库的数据
http 四大特点;1基于TCP/IP协议作用与应用层的协议 2.基于请求响应 3.无状态,(来一万次待你如初见) 4.无连接 一次请求一次链接,请求完毕断开链接 数据格式 请求首行 请求头(一堆k,v键值对) r/n 请求体(post请求携带的数据) 状态吗 1xx服务器已经成功接受到你的数据正在处理,你可以继续提态码 2xx 请求成功,服务器已经将你请求的数据发给你了 3xx重定向 4xx 请求资源不存在 5xx 服务器错误
静态网页
数据写死了,万年不变
动态网页
页面的数据是从后端动态获取的
比如后端获取数据库数据后传递给前端页面
模板渲染 后端生成的数据直接传递给前端页面使用,前端可以灵活操作数据,联想字典可以点操作数据w < p>{{ user_dic }}</p> <p>{{ user_dic.name }}</p> <p>{{ user_dic['password'] }}</p> <p>{{ user_dic.get('name') }}</p>
下载Django 命令行直接下载pip3 install django==1.11.11 验证是否下载成功django-admin
创建项目 方式1(命令行创建): 创建django项目 django-admin startproject 项目名 创建app应用 python3 manage.py startapp app01 启动django项目 python3 manage.py runserver ps:用命令行创建django默认不会自动创建templates文件夹
方式2 FILE >>> new project 选择第二个django 需要注意名字不能有中文,选择本地的解释器,勾选后台管理 创建app pycharm命令行创建 python3 manage.py startapp app01 Tools下面run manage task功能栏 启动点小绿色箭头 强调: 1.用django一定要保证只有一个在运行状态 切记切记!!!!!!! 2.一定记得清浏览器的缓存
小白3板斧 from django.shortcuts import render,HttpResponse,redirect HttpResponse 返回字符串 render 返回一个HTML页面 redirect 重定向
两种给前端页面传值的方式 def reg(request); user_dict = {'name':'jason','password':'123'} return render(request,'reg.html',{'user_dict':user_dict}) def reg(request): user_dict = {'name':'jason','password':'123'} return render(request,'reg.html',locals())