web应用程序处理流程
客户端
- 向服务器端发送HTTP请求
- 从服务器端接收HTTP响应
- 与服务器端遵循HTTP协议
服务器端
- 服务器程序
- 接收&解析HTTP请求报文
- 构造&返回HTTP响应报文
- 框架程序(Django,Flask)
- http请求对象(Request)
- 具体业务逻辑(Web应用的核心)
- http响应对象(Response)
- 与框架程序遵循WSGI协议
Django基础一
Django的MVT
- Model:负责和数据库交互,进行数据处理
- View:接收请求,进行业务处理,返回应答
- Template:负责封装构造要返回的html
搭建环境
- 创建虚拟环境
mkvirtualenv django_1.11 -p python3
- 安装Django
pip install django==1.11.11
- 虚拟环境相关指令
mkvirtualenv # 创建虚拟环境
rmvirtualenv # 删除虚拟环境
workon # 进入虚拟环境、查看所有虚拟环境
deactivate # 退出虚拟环境
- pip相关指令
pip install # 安装依赖包
pip uninstall # 卸载依赖包
pip list # 查看已安装的依赖库
pip freeze
创建工程
- 创建工程
django-admin startproject 工程名称
- 工程目录说明
__init__.py:目录为python包
settings.py :项目的配置文件。
urls.py :项目URL路由的配置文件,URL地址与视图函数的映射表。
wsgi.py :Web服务器和Django交互的入口。
manage.py :是项目管理文件
urls.py中的path函数
path(route, view, kwargs=None, name=None)
route: 字符串,表示 URL 规则,与之匹配的 URL 会执行对应的第二个参数 view。
view: 用于执行与正则表达式匹配的 URL 请求。
kwargs: 视图使用的字典类型的参数。
name: 用来反向获取 URL。
- 运行开发服务器
python manage.py runserver ip:端口
创建子应用
- 创建子应用
python manage.py startapp 子应用名称
一个项目由多个应用(模块)组成,每一个应用完成一个特定的功能
在pycharm中,Tools--->Run manage.py task--->在管理器中输入startapp 子应用名称,也能创建子应用
- 子应用目录说明
__init__.py 目录为python包
admin.py 文件跟网站的后台管理站点配置相关。
apps.py 文件用于配置当前子应用的相关信息。
migrations 目录用于存放数据库迁移历史文件。
models.py 文件用户保存数据库模型类。
tests.py 文件用于开发测试用例,编写单元测试。
views.py 定义处理函数(视图函数),接收并处理请求,与M&T交互,返回应答。
- 注册安装子应用
- 建立应用与项目之间的练习,对应用进行注册
- 修改settings.py中INSTALLED_APPS列表的配置
创建视图views
- 编写Web应用的业务逻辑
- 视图函数的参数为HttpReqeust对象,名为request
- 视图函数的返回值为响应对象,将要返回的字符串放到HTTPResponse对象中
添加路由
- 在每个应用中创建自己的子路由文件,然后在主urls中添加子路由
- urls中的路径遵循正则表达式有^和不能出现在总路由urls的匹配路由中
- 主路由中的子路由添加有字符串和路径(导包)两种方式
配置文件
- BASE_DIR,当前工程的根目录,
- DEBUG(开发和上线),DEBUG为True时,默认工作在调试模式下,部署线上
修改DEBUG=False - 本地语言与时区,初始化的工程默认语言和时区为英语和UTC标准时区
静态文件
- 项目中的CSS、图片、js都是静态文件,有些静态文件在项目中是通用的,通常放
在项目的根目录下 - 配置两个参数
STATICFILES_DIRS=[] 存放查找静态文件的目录 接收的是list
STATIC_URL 访问静态文件的URL前缀 - Django 仅在调试模式下(DEBUG=True)能对外提供静态文件
- 当DEBUG=False工作在生产模式时,Django不再对外提供静态文件,需要是用
collectstatic命令来收集静态文件并交由其他静态文件服务器来提供
路由说明
路由定义位置
工程同名目录下的urls.py文件是Django解析路由的入口,每个子应用为了保持相对
独立,在各个子应用中定义自己的urls.py来保存该应用的路由。然后在主路由文件
中包含各应用的子路由数据
Django接收到请求时,从主路由文件中的urlpatterns列表中,以由上至下
的顺序查找对应路由规则,如果发现include包含,进入被包含的urls中
的urlpatterns列表由上至下进行查询,由上自下可能会使上面的路由屏蔽掉下面的
路由,带来非预期结果-
路由命名与reverse反解析
在使用include函数定义路由时,可以使用namespace参数定义路由的命名空间
在定义普通路由时,可以使用name参数指明路由的名字使用reverse函数,可以根据路由名称,返回具体的路径
对于未指明namespace的,reverse(路由name)
对于指明namespace的,reverse(命名空间namespace:路由name)
Remark:
URL:统一资源定位符,互联网上的每个文件都有唯一的URL
URL格式:
schema://host[:port#]/path/.../[?query-string][#anchor]
schema:指定使用的协议(有http,https,ftp)
host:http服务器的IP或域名
port:端口号
path:访问资源的路径
query-string:发送给http服务器的数据
anchor:锚点,在页面上的定位(前端)
端口被占用解决方式:
ps aux 查看Linux的当前进程
kill -9 进程号 杀死进程