内容来源于【2020 最新python教程】第五部分:Django框架课程教学笔记
Django处理浏览器请求的流程
1.请求发送到了wsgi(Web服务器网关接口),wsgi封装请求的相关数据(request)
2. Django去匹配路径,根据路径判断要执行那个函数
3. 执行函数,函数中处理具体的业务逻辑
4. 函数返回响应,Django按照HTTP协议的响应的格式进行返回。
发请求的途径
- 在浏览器的地址栏中输入地址—>回车,得到get请求
- a标签–》得到get请求
- form表单常用的是发送post请求,method指定请求的方式,POST/GET
get和post请求的区别
get:获取一个资源,?k1=v1&k2=v2在地址栏中设置参数 get请求没有请求体
post:提交数据 request.POST,数据在请求体中
views.py
#简略版,流程
def login(request):
#业务逻辑
return 响应
HttpResponse(‘字符串’)#返回一个字符串
render(request,‘模板文件名’,{'k1':v1})
redirect('地址')#重定向
request.method #请求方式,GET、POST
ORM
models.py
class Publisher(models.Model):#类对应数据库中的表
name=models.CharField(max_length=32)#对应数据库中的varchar(32)
class Book(models.Model):
name=models.CharField(max_length=32)
publisher = models.ForeignKey(Publisher,on_delete=models.CASCADE)#外键关联,参数表示关联到什么地方
#可以只写类名,也可以写成类名字符串形式;默认是级联删除(on_delete参数决定)
'''
on_delete 2.0版本后是必填的
on_delete=models.CASCADE 级联删除,出版社删除,相关联的书籍被删除
on_delete=models.PROTECT 保护,出版社还有相关联的数据时,不允许删除
on_delete=models.SET(v) 删除后设置为某个值
on_delete=models.SETDEFAULT 删除后设置为默认值
publisher_id = models.ForeignKey(Publisher,on_delete=models.SETDEFAULT,default=‘默认值’)
on_delete=models.SETNULL 删除后设置为Null
models.DO_NOTTHINFG 什么都不做
'''
ORM操作
查:
from app01 import models
models.Publisher.objects.all()#获取所有的数据,QuerySet 对象列表
models.Publisher.objects.get(name='xxx',id='1')#获取一条存在且唯一的数据,对象
models.Publisher.objects.filter(name='xxx',id='1')#获取多条数据,QuerySet 对象列表
ret =models.Book.objects.all()#对象列表
for book in ret:
# print(book)
# print(book.pk)
# print(book.publisher)#书籍所关联的出版社对象(出版社的名字)
# print(book.publisher_id)#书籍所关联的出版社id(book表中的出版社id)
新增
models.Publisher.objects.create(name=‘xxx’)#新增的对象
models.Book.objects.create(name=‘xxx’,publisher=出版社对象)#新增的对象,name和publisher字段与数据库中的字段一致
models.Book.objects.create(name=‘xxx’,publisher_id=出版社的id)#新增的对象
删除
models.Publisher.objects.get(name='xxx',id='1').delete()
models.Publisher.objects.filter(name='xxx',id='1').delete()#得到对象列表,批量删除
编辑
#方法一
book_obj.name='xxx'
book_obj.publisher=出版社对象
book_obj.publisher_id=出版社的id
book_obj.save()#这个步骤将数据同步保存在数据库中
#方法二
models.Book.objects.filter(pk=1).update(name='xxx',piblisher_id=出版社的id)#批量更新,.update()是对象列表的更新函数
模板的语法
return render(request,‘模板文件名’,{‘k1’:v1,‘k1’:v1})
在模板文件名中使用变量
{{ k1 }} {{ k2 }}
#for循环的语法{% for i in k1 %}和{% endfor %}必须成对使用
{% for i in k1 %}
{{ forloop.counter }}#得到循环的次数
{{ i }}
{% endfor %}
#if的语法,{% if 条件 %}和{% endif %}必须成对使用
{% if 条件 %}
xxx
{% elif 条件 %}
xxx
{% else %}
xxx
{% endif %}