首页 > 其他分享 > 第十三周内容回顾

第十三周内容回顾

时间:2022-12-26 16:36:13浏览次数:35  
标签:第十三 回顾 创建 校验 查询 forms ORM 内容 SQL

Q查询的进阶操作

实际上就是利用字符串查询,这样就可以跟用户交互

from jango.db.model import Q
q_obj = Q()		先产生一个q对象
q_obj.children.append(('pk',1))	 表示给q对象添加查询条件pk=1,只是pk变成了字符串
res = models.Book.ojbects.filter(q_obj)		这样查询的也是pk=1的书籍
注意:
    q对象可以添加多个条件,多个条件默认是and的关系
    q_obj.connector = 'or'		可以将多个条件的关系改为or

ORM查询优化

1.ORM查询默认都是惰性查询,使用到查询结果才会执行SQL语句,没使用到不会执行
2.ORM自带分页处理,直接查询多条结果,SQL语句在底层执行的时候自动带分页操作,防止打印的记录过多出现内存不足的情况
3.only与defer
	当使用only查询时,SQL在查询括号内的字段时会直接封装到结果中,所以当我们使用括号内的字段时不会再执行SQL语句,而使用括号没有的字段名则会重新执行SQL语句,而defer与之相反
4.select_related与prefetch_related
	第一种是连表查询,第二种是子查询,实际看不出来区别,但是底层SQL执行的语句是有区别的

ORM事务操作

"""
数据库事务的4大特性:原子性、一致性、隔离性、持久性
"""
OMR三种开启事务的方式:
方式1:配置文件数据库相关添加键值对,全局有效
    "ATOMIC_REQUESTS": True每次请求所涉及到的orm操作同属于一个事务
方式2:装饰器		函数/类内部有效
    from django.db import transaction
    @transaction.atomic
方式3:with上下文管理			局部有效
    with transaction.atomic():

ORM常用字段

AutoField		自称主键使用
CharFiled		字符类型		max_lenght()
DateField		时间
IntegerField	整形
DecimalField	小数		max_digits		decimal_places
TextField		文本
EmailField	    邮箱

ORM常用字段参数

primary_key		主键
verbose_name	注释
auto_now		每次操作自动更新时间
auto_now_add	记录第一次创建时间
null			是否为空
default			默认值
choice			选择
to				关联表面
to_field		关键字段
on_delete		级联删除

choice用法展示

class User(models.Model):    # 创建表
    name = models.CharField(max_length=32)
    info = models.CharField(max_length=64)
    gender_choice = ((1,'男性'),(2,'女性'))
    gender = models.IntegerField(choice=gender_choice)
提前把所有的关系全部罗列出来,然后添加选择选项中 

Ajax操作

异步提交 局部刷新

$.ajax({
    url:'',
    type:'post',
    date:{'name':'jason'},
    success:function(接收后端想用的数据){}
})

使用ajax交换,那么后端返回的数据会被args接收,不再直接影响整个浏览器页面

Ajax补充说明

针对毁掉函数args接收的响应数据

1.后端request.is_ajax()		用于判断当前请求是否是由ajax发起的
2.后端返回的三板斧都会被args接收不再影响整个浏览器页面
3.选择使用ajax做前端交互的时候,后端一般返回的都是字段数据
	user_dict = {'cod':10000,'username':'jason'}

多对多的三种创建方式

1.全自动创建,自己指定虚拟外键,由django帮我们创建第三场表
	优点:自动创建,并且提供了add/remove/set/clear四种操作方式
  	缺点:扩展性比较差
2.纯手动创建,自己创建第三张表,创建关联关系
	优点:扩展性比较高
  	缺点:繁琐,没办法使用四种操作方式,正反向查询也不能使用
3.半自动创建,自己创建第三张表,但是使用自动创建写虚拟字段,指定
	优点:扩展性高,也可以使用正反向查询
   	缺点:没办法使用四种操作方式

forms组件

1.自动校验数据,提前定义好要求的类,然后在视图函数中利用获取到的信息产生类的对象,就可以进行信息的校验
2.forms组件渲染标签
	{% for forms in forms_obj %}
    {{forms.label}}
    {{forms}}
这个渲染是循环取出每一个froms标签的用户输入框,先打印label值,再打印标签
注意事项:
    forms组件只负责渲染获取用户数据的标签,也就意味着from标签与按钮标签需要自己写

forms组件校验补充

froms组件针对字段数据的校验,提供了三种类型的校验方式
1.直接写参数
2.使用正则表达式
3.钩子函数		局部钩子  全局钩子

django中间件

django默认有7个中间件,并且还支持用户自定义中间件
中间件主要可以用于:网站访问频率的校验,用户权限的校验等全局类型的功能需求
    
process_request
	1.请求来的时候会自动从上往下执行该方法,没有则跳过
  	2.如果该方法自己返回了HttpResponse对象那么不再往后执行而是直接原路返回
process_response
	1.响应走的时候会从下往上经过每一个注册了的中间件里面的该方法,没有则跳过
  	2.该方法必须有两个形参request,response,形参response指代的就是后端想要返回给前端的信息
process_view
	路由匹配成功之后执行视图函数/类之前自动触发
process_exception
	视图函数、类执行报错自动触发
process_template_response
	视图函数/类返回的HttpResponse对象含有render并且对应一个方法的时候自动触发

标签:第十三,回顾,创建,校验,查询,forms,ORM,内容,SQL
From: https://www.cnblogs.com/zhanghong1229/p/17006106.html

相关文章