什么是web应用?
软件开发架构:
c/s架构
客户端
服务端
b/s架构
浏览器
服务器
HTTP协议:
超文本传输协议,规定了客户端与服务端之间传输数据的格式
HTTP四大特性:
1.它是基于tcp/ip协议应用在应用层的协议
2.基于请求响应
3.无状态
4.无连接
为什么说其无状态无连接:因为http请求建立起连接后会立马断开并重新建立连接,所以说这样是没有状态的,另外,服务端只能等待客户端连接,不会主动发送数据给客户端
数据格式之请求:
1.请求首行
2.请求头(一堆k与v的键对值)
GET / HTTP/1.1
Host: 127.0.0.1:8080 (主机名)
Connection: keep-alive (保持链接)
Cache-Control: max-age=0 (缓存不失效)
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Token: bdsjalbdjsalbdjsa
注意这里是空格!!!
4.请求体(post请求携带的数据)
数据格式之响应:
1.响应首行
2.响应头(k与v的键对值)
空格!!!
4.响应体(post请求携带的数据)
http的默认端口是80,https是443
响应状态码:
1xx :表示服务器已经成功接收到了数据正在处理,可以继续发送数据给服务端
2xx:200 表示请求已经成功,并且已经将数据放回给客户端
3xx:302 表示永久重定向 303表示暂时重定向
4xx:404 表示请求失败,403表示禁止访问,权限不够
5xx:500 表示服务端代码错误 502表示网关错误
DNS(域名解析服务器,记录者域名与IP的对应关系)工作流程:
pc端会将域名发送给本地DNs服务器,如果本地DNS没有会去找根DNS服务器,根DNS会将域名所在顶级服务器返回,并重新找顶级DNS服务器,一环一环下来,直到找到并返回数据,然后本地DNS服务器会将数据存在缓存并返回数据给客户端。
DNS分级:
13台根域名服务器(10台在美国,2台欧洲(1台英国,一台瑞典),一台日本)
13台顶级DNS服务器(.com,.net,.org,.cn,.edu)
权威域名服务器(baidu.com)
二级域名服务器(www.baidu.com)
动静态网页:
静态网页:页面上的数据都是写死的,万年不变
动态网页:页面上的数据是从后端动态获取的
比如后端获取当前数据库数据然后传递给前端页面
模板渲染:
后端生成的数据直接传递给前端页面使用(并且前端页面可以灵活的操作改数据)===模板语法。
模板渲染 模板语法需要依赖于第三方模块
pip install jinja2
模板语法 jinjia2支持前端直接使用类似于python的语法操作数据
<p>{{ user_dic }}</p> <p>{{ user_dic.name }}</p> <p>{{ user_dic['password'] }}</p> <p>{{ user_dic.get('name') }}</p> {% for user in user_dict %} <!--[{},{},{},{}]--> <tr> <td>{{ user.id }}</td> <td>{{ user.name }}</td> <td>{{ user.password }}</td> </tr> {% endfor %}
什么是web框架?
python主流的三大web框架:
Django:大而全,里面有很多自带的模块(缺点:有点笨重)
Flask:短小精悍,自带的模块非常少,主要依赖于第三方模块(小而轻)
Tornado:异步非阻塞,主要用于处理高IO,多路复用的情况,可以写游戏后端
自定义的web框架:
a.socket服务端
b.路由与视图函数
c.将html代码和mysql的数据进行融合(自己定制规则,使用第三方工具)模板渲染
按照上面的abc三大主流web框架的特点 是
Django:
a用的别人的 模块wsgiref
b自己写的
c自己写的
Flask:
a用别人的 werkzeug
b自己写的
c用的别人 的 jinjia2
Tornado:
abc都是自己写的
注意事项:
1.计算机的名称不能有中文
2.一个parcharm窗口就是一个项目,不要多个项目放在一个窗口里面
3.项目名不能起中文
创建django:
方式一(命令行创建):
创建django项目
django-admin startproject 项目名
创建app应用
python3 mange.py startapp app01
启动django项目
python3 mange.py runserver
ps:用命令行创建django默认不会自动创建templates文件夹
需要你手动自己创建(注意改文件夹路径是否被添加配置文件中
方式2:(pycharm创建)
FILE >>> new project 选择第二个django
需要注意名字不能有中文,选择本地的解释器,勾选后台管理
创建app
pycharm命令行创建
python3 mange.py startapp app01
Tools 下面run mange task 功能栏
启动点小绿色箭头
强调:
1.用django一定要保证只有一个在运行状态!!!!!
2.一定记得清浏览器的缓存
django创建完成后
1.配置末班文件路径:'DIRS': [os.path.join(BASE_DIR, 'templates')]
2.配置静态资源的文件路径:
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'), (逗号不能少)
)
注释中间件:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
django小白必会三板斧
from django.shortcuts import render,HttpResponse,redirect
HttpResponse 返回字符串
render 返回一个html页面
两种给前端页面传值的方式
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())
redirect 重定向
django识别到你的代码变化之后会自动,但是有时候反应速度比较慢
你可以手动重启,你也可以多刷新几次浏览器
路由系统:
[ ('/xxx',f1),('/bbb',f2),('/ggg',f3) ]
里面的f1,f2,f3对应就是外面定义的函数