什么是web应用
软件开发架构
c/s架构:客户端/服务端
b/s架构:浏览器/服务器
本质:b/s架构其实就是c/s架构
HTTP 协议
http协议:超文本传输协议,规定了客户端与服务端之间的传输格式
四大特性
'''
1.基于TCP/IP协议作用于应用层的协议
2.基于请求响应
3.无状态
4.无连接
'''
数据格式之请求:
'''
请求首行
请求头(一堆k,v键值对)
请求体(post请求携带的数据)
'''
数据格式之响应
'''
请求首行
请求头(一堆k,v 键值对)
请求体(post请求携带的数据)
'''
响应状态码
'''
1XX 服务器已经成功接受到你的数据正在处理,你可以继续提交其他数据
2XX 请求成功 服务器已经将你请求的数据发送给你了
3XX 重定向
4XX 请求资源不存在
5XX 服务器错误
'''
模块渲染
渲染:后端生成的数据直接传递给前端页面使用(并且前端页面可以灵活的操作该数据)
模块渲染:借助第三方模块
pip install jinja2
jinja2 模块语法
jinja2支持前端直接使用的类似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框架思路
'''
1、导入 impor socket
2、定义服务器:
3、循环,阻塞等待连接
4、根据http协议发送请求
5、手动处理http数据,获取用户访问的路径
6、路由匹配上后返回数据,当匹配不上是统一返回404
'''
基于wsgiref手撸框架
# 主逻辑
1、导入wsgiref模块
2、sever = make_server('127.0.0.1',8080,run)
3、定义run函数
def run(env,response)
'''
env:请求信息,大字典里面装满K,V键值对
response:响应信息,固定写法
'''
4、获取用户路径 env.get(PATH_INFO)
5、循环对比路由与视图函数之间映射关系,匹配成功结束循环
# URL:映射关系视图
# view:定义各种功能块
Django
python 三大主流web框架
'''
django:功能全面,但是笨重
flask:短小精悍,但是功能单一需要依赖第三方库
tornado:异步非阻塞,主要用在处理高IO
'''
'''
a:socket
b:路由和视图函数
c:模块渲染
Django:
a用的别人的 wsgiref
b自己写的
c自己写的
Flask:
a用的别人的 werkzeug
b自己写的
c用的别人的 jinja2
Tornado:
a,b,c都是自己写的
'''
注意事项
1.计算机的名称不能有中文
2.一个pycharm窗口就是一个项目,不要多个项目放在一个窗口里面
3.项目名不能起中文
Django简介
版本问题
django下载
推荐下载1.11.11版本
命令行直接下载
pip3 install django==1.11.11
pycharm下载
验证是否下载成功
django-admin
创建Django的方式
# 方式1(命令行式):
'''
1、创建Django项目:django-admin startproject 项目名
2、创建app应用:python3 manage.py startapp app01
3、启动Django项目:python3 manage.py runserer
ps:用命令行创建django默认不会自动创建templates文件夹
需要你手动自己创建(注意改文件夹路径是否被添加配置文件中)
'''
# 方式2(pycharm创建)
'''
FILE >>> new project 选择第二个django 需要注意名字不能有中文,选择本地的解释器,勾选后台管理
创建app
pycharm命令行创建
python3 manage.py startapp app01
Tools下面run manage task功能栏:startapp app02
启动点击运行
'''
注意新创建的app需要在配置文件中注册才能生效
Django各个文件的作用
应用名
'''
migrations: 数据库迁移记录相关数据
admin.py: django后台管理
models.py: 模型表相关
views.py: 视图函数相关
'''
项目名
'''
settings.py: 配置文件
urls.py: 路由与视图函数映射关系
'''
templates
项目用到的所有的html页面
manage.py
django入口文件
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 重定向