request对象的几种方法
# GET POST FILES method
path path_info get_full_path() body
def index(request):
print(request.path) # /index/
print(request.path_info) # /index/
print(request.get_full_path()) # 接收路径的全部内容,连参数也能拿到 /index/?username=kevin
print(request.body) # 浏览器发过的二进制数据
return HttpResponse('ok')
1.什么是FBV与CBV,能不能试着解释一下CBV的运作原理
FBV是在视图里面写函数的 路由里面写views.函数名
CBV是在视图里面写类的 路由里面写views.类名.as_view()
本质上:路由里面的都是函数的内存的地址
CBV vies.类名.as_view() View中有as_view函数,返回值是view函数的内存地址,路由就可以变形为
view,浏览器请求路由,加括号调用view函数,view函数最后返回调用dispath函数,dispath函数调用getatter
判断是否拥有这个方法,拥有这个方法,返回这个方法的内存地址,加括号调用
2.模版语法的传值需要注意什么,常见过滤器及标签有哪些
模板语法中只用点语法
过滤器;safe,lenth,data('Y-m-d')
3.什么是模版的继承与导入,如何正确使用
{{}} 跟变量有关
{%%} 跟逻辑有关
{%extends 'html'%}
{% blovk css%}
style
{% endblock %}
1.常见的十几种查询方法都有哪些,每个都是干啥使的
get,filter, all(),first(),last()
values() 结果是列表套字典
values_list 结果是列表套元组
res = models.user.objects.filter(条件)
res.query #查看原生sql语句
update() 修改数据
delete() 删除数据
user_obj.save() 对象,保存数据
distinct() 去重
order by 排序
reverse 反转 有序才能反转
count 查看表中数据的数量
2.简述双下划线查询都有哪些方法,作用是什么
大于,小于,大于等于,小于等于
filter(__gt) 大于
filter(__lt) 小于
filter(__gte) 大于等于
filter(__lte) 小于等于
#in
字段__in=[12,13,14]
#模糊查询
filter(__contains='s') 模糊查询,查看字段中包含s的
filter(__startswith='s') 以s开头
filter(__endswith='s') 以什么结尾
#时间
filter(__minth=5) #查看是时间是五月的
filter(__year=5) #查看是时间是五号的
查看原生sql语句
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level': 'DEBUG',
},
}
}
3.针对多对多外键字段的增删改查方法有哪些,各有什么特点?
# 1. 子查询
###########################多表查询
# 1.查询书籍主键为1的出版社
# 先把书籍查询出来
# book_obj = models.Book.objects.filter(pk=1).first()
# book----->publish----->正向查询------>正向查询按外键字段
# print(book_obj.publish) # 它就相当于是出版社对象了
# publish_obj = book_obj.publish
# print(publish_obj.name)
# print(publish_obj.addr)
# 2.查询书籍主键为2的作者
# book----->author------->正向查询----->按字段
# book_obj = models.Book.objects.filter(pk=2).first()
# print(book_obj.authors) # app01.Author.None
# print(book_obj.authors.all()) # app01.Author.None
# 3.查询作者jack的电话号码
# 作者---------->详情-------->正向------->字段
# author_obj = models.Author.objects.filter(name='jack').first()
# print(author_obj.author_detail)
# author_detail_obj = author_obj.author_detail
# print(author_detail_obj.phone)
# # 4.查询出版社是北京出版社出版的书
# 先查出出版社的对象
# publish_obj = models.Publish.objects.filter(name='北京出版社').first()
# # 出版社 查 书 --------------> 反向-------->反向查询按表名小写或者_set
# print(publish_obj.book_set) # app01.Book.None
# print(publish_obj.book_set.all()) # app01.Book.None
# 5.查询作者是jack写过的书
# author_obj = models.Author.objects.filter(name='jack').first()
# # 作者 查 书 -------------->反向查询----->
# print(author_obj.book_set) # app01.Book.None
# print(author_obj.book_set.all()) # app01.Book.None
# 6.查询手机号是110的作者姓名
# 详情表中
# author_detail_obj = models.AuthorDetail.objects.filter(phone='110').first()
# # 详情 -----》 作者 -------》反向-------》表名小写
# print(author_detail_obj.author) # Author object (1)
# print(author_detail_obj.author.name) # Author object (1)
# 2. 连表查询
联表查询(基于双下划线的跨表查询)
####################################基于双下划线的查询
## 1.查询jack的手机号和作者姓名
# 作者 查 作者详情-------》正向查询-------》按字段
# author_obj = models.Author.objects.filter(name='jack').values('name','author_detail__phone')
# print(author_obj)
# 反向查询
# author_detail_obj = models.AuthorDetail.objects.filter(author__name='jack').values('phone','author__name')
# print(author_detail_obj)
# 2.查询书籍主键为1的出版社名称和书的名称
# 书 ---》 出版社----》正向-----》按字段
# book_obj = models.Book.objects.filter(pk=1).values('title', 'publish__name')
# print(book_obj)
# 反向查询
# publish_obj = models.Publish.objects.filter(book__pk=1).values('name', 'book__title')
# print(publish_obj)
# # 3.查询书籍主键为1的作者姓名
# 书---》作者----》正向----》字段
# book_obj = models.Book.objects.filter(pk=1).values('authors__name')
# print(book_obj)
# 反向查询
# author_obj = models.Author.objects.filter(book__pk=1).values('name')
# print(author_obj)
# # 查询书籍主键是1的作者的手机号
# book ----> author ----> author_detail
author_detail = models.Book.objects.filter(pk=1).values('authors__author_detail__phone')
print(author_detail)
'''当表特别多的时候,ORM语句其实并不好写,如果你真遇到这种不好写的语句的时候,就是要原生sql语句'''
4.什么是正反向的概念,及查询口诀,你能否总结一下正反向查询不同情况下点击不同字段的规律
正反向
正向----按外键字段
反向----按表名小写或者_set