day-18 Django
1. WEB框架的本质
socket 套接字 网络通信
位于应用层和传输层之间的虚拟层,接口
OSI
应用层 HTTP
传输层 TCP UDP
网络层 IP
数据链路层
物理层
1. HTTP协议
1. 请求(request) 浏览器向服务器发送的消息
消息格式:
'请求方法 URL 协议版本
k1: v1
k2: v2
请求体'
2. 响应(response) 服务器向浏览器响应的消息
消息格式:
协议版本 状态码 状态描述符
k1: v1
k2: v2
响应体(HTML页面)
2. web框架
功能:
1. socket收发消息 服务器程序 uwsgi Gunicorn
应用程序
2. 根据不同的URL返回不同的页面(URL和函数对应关系)
3. 动态的页面(字符的替换)
python web的分类
Django 自己实现2,3 使用第三方的 开发阶段: wsgiref模块 部署:uwsgi
flask 自己实现了2
tornado 自己实现了1,2,3
分类:
1. Django
2. 其他
2. Django
3. 下载Django
1. 命令行
pip3 install django==1.11.15
2. pycharm安装
4. 创建项目
1. 命令行
django-admin startproject 项目名
2. pycharm
5. 启动项目
1. 命令行
cd 项目目录下
python manage.py runserver # 127.0.0.1:8000
python manage.py runserver 80 # 127.0.0.1:80
python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80
2. pycharm
6. APP
创建APP
1. python manage.py startapp APP名字
注册APP
2. 在settings.py
INSTALLED_APPS = [
'app01',
'app02.apps.App02Config'
]
7. 路由系统(URL和函数的对应关系)
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'index',views.index)
]
从上往下进行匹配
第一个参数是正则
8. 视图函数
1. request 封装了请求所有的东西
request.path_info ——》URL路径
request.method ——》请求方式
request.POST ——》POST提交的数据 { }
request.GET ——》URL上的参数 /login/?username=alex&passwor=123
2. 响应
新手必备三件套
1. HttpResponse('home') —— 返回一个字符串
2. render(request,'index.html') —— 返回一个具体的页面
3. redirect(跳转的URL) ——重定向 响应头 location:'跳转的地址'
9. 静态文件的配置
STATIC_URL = '/static/' # 别名 /static999/
STATICFILES_DIRS= [
os.path.join(BASE_DIR,'static')
]
10. ORM
1. pymysql连接数据库
1.import pymysql
2. 创建一个连接
3. 创建一个光标
4. 执行SQL语句
5. 得到sql的结果
6. 关闭光标
7. 关闭连接
2. ORM
1. 优点
不用写SQL
2. 缺点
1. 只能完成一部分操作
2. 效率低
3. 是什么?
对应关系
类 表
对象 记录
属性 字段
4. ORM的功能:
1. 操作数据表
2. 操作数据行
5. 使用ORM
1. 创建一个数据库
2. 配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 's22day18',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': 3306,
}
}
3. 在项目同名的文件夹下的__init__.py中写代码:
import pymysql
pymysql.install_as_MySQLdb()
4. 在app下的models.py中写类:
class Publisher(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=16)
5. 执行数据库迁移的命令
python manage.py makemigrations # 保存APP下的models.py的变更记录
pyhton manage.py migrate # 将变更记录同步到数据库中
3. ORM操作
1. 查询
获取所有数据
models.Publisher.objects.all() —— 》 queryset 对象列表
获取满足条件的所有数据数据
models.Publisher.objects.filter(name='xxx') —— 》 queryset 对象列表
排序
models.Publisher.objects.all().order_by('id') —— 》 queryset 对象列表 升序
models.Publisher.objects.all().order_by('-id') —— 》 queryset 对象列表 降序序
获取一个对象
models.Publisher.objects.get(nid=1)
# 获取不到或者获取多个就报错
2. 增加
models.Publisher.objects.create(name='xxxxx') —— 》成功插入的对象
3. 删除
models.Publisher.objects.filter(nid=nid).delete() ——》 删除满足条件的所有对象
models.Publisher.objects.get(nid=nid).delete() ——》 删除对应的对象
4. 修改
pub_obj = models.Publisher.objects.get(nid=nid)
pub_obj.name = 'xxxx'
pub_obj.save() # 写入数据库
11. 模板语法
{{ 变量 }}
{{ pub_obj.name }}
{{ pub_obj.id }}
{% for i in pub_list %}
{{ forloop.counter }} # 当前循环的次数
<tr>{{ i }}</tr>
{% endfor %}