Django(51-65)
目录
- 51、Django中filter和exclude的区别?
- 52、Django中values和values_list的区别?
- 53、如何使用django orm批量创建数据?
- 54、Django的Form和ModeForm的作用?
- 55、Django的FORM组件中,如果字段中包含choice参数,请使用两种方式 实现数据源实时更新
- 56、Django的model中的ForeignKey字段中的on_delete参数有什么作用?
- 57、基于Django使用ajax发送post请求时,有哪些方法携带csrftoken?
- 58、Django的缓存怎么使用redis?如何配置?
- 59、Django路由系统中name的作用?
- 60、Django的模板中filter、simpletag、inclusiontag的区别?
- 61、Django-debug-toolbar的作用?
- 62、django中如何实现单元测试?
- 63、解释ORM中dbfirst和codedirst的含义?
- 64、Django中如何让根据数据库表生成model类?
- 65、使用orm和原生sql的优缺点?
51、Django中filter和exclude的区别?
两者取到的值都是QuerSet对象,filter选择满足条件的,exclude:取反,选择不满足条件的
52、Django中values和values_list的区别?
values:queryset类型的列表中是字典
values_list:queryset类型的列表中是元组
53、如何使用django orm批量创建数据?
用bulk_create()
objs=[models.Book(title="图书{}".format(i+15)) for i in range(100)] # 100条数据列表
models.Book.objects.bulk_create(objs) # 一次批量插入
54、Django的Form和ModeForm的作用?
Form组件的主要功能如下:
生成页面可用的HTML标签 ——>只能生成获取用户信息的那些input标签等
对用户提交的数据进行校验,返回错误提示信息
保留页面上用户输入的内容
ModelForm组件,这个组件主要就是将model与Form组件的功能结合起来,可以更加便捷的对数据进行添加、编辑以及数据的验证操作。相对于单独的Form组价来说要方便很多。但是Form组件会比这个ModelForm组件更加灵活,如果在使用Django做web开发过程中验证的数据和数据库字段相关(可以对表进行增、删、改操,注意 Many to many字段,也可以级联操作第3张关系表;),建议优先使用ModelForm,用起来更方便些,但是在使用ModelForm的时候慎用fields='__all__',获取数据库所有字段势必造成资源的浪费。
55、Django的FORM组件中,如果字段中包含choice参数,请使用两种方式 实现数据源实时更新
1.重写构造函数
def__init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["city"].widget.choices = models.City.objects.all().values_list("id", "name")
2.利用ModelChoiceField字段,参数为queryset对象
authors = form_model.ModelMultipleChoiceField(queryset=models.NNewType.objects.all())//多选
56、Django的model中的ForeignKey字段中的on_delete参数有什么作用?
删除关联表中的数据时,当前表与其关联的field的操作
django2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常
57、基于Django使用ajax发送post请求时,有哪些方法携带csrftoken?
1.后端将csrftoken传到前端,发送post请求时携带这个值发送
data: {
csrfmiddlewaretoken: '{{ csrf_token }}'
},
2.获取form中隐藏标签的csrftoken值,加入到请求数据中传给后端
data: {
csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val()
},
3.cookie中存在csrftoken,将csrftoken值放到请求头中
headers:{ "X-CSRFtoken":$.cookie("csrftoken")}
58、Django的缓存怎么使用redis?如何配置?
# 设置django缓存存放位置为redis数据库,并设置一个默认(default)选项,在redis中(配置文件/etc/redis/redis.conf)开启了RDB持久化储存
# pip install django-redis, 然后在视图中可以通过 from django_redis import get_redis_connection 这个方法和redis数据库进行连接
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
# redis服务器的ip地址及端口号,及数据库序号,redis一共有15个数据库 0~15
"LOCATION": "redis://127.0.0.1:6379/6",
# "LOCATION": "redis://:passwordpassword@47.193.146.xxx:6379/0", # 如果redis设置密码的话,需要以这种格式进行设置,host前面是密码
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
59、Django路由系统中name的作用?
name:对URL路由关系进行命名
60、Django的模板中filter、simpletag、inclusiontag的区别?
filter的用法:
#先引入template
from django import template
#声明register,名字只能是register
register = template.Library()
#带名字的装饰器,调用的时候用起的名字 如dsb
@register.filter(name='dsb')
def add_sb(value, arg):
return "{}_{}abc".format(value, arg)
@register.filter
def add_sb(value, arg):
return "{}_{}_abc".format(value, arg)
自定义simpletag和自定义inclusion_tag
1. 在app下创建一个名叫templatetags的python包
2. 在templatetags里建一个py文件
simpletag的用法:
和自定义filter类似,只不过接收更灵活的参数。
61、Django-debug-toolbar的作用?
django开发调试工具
django-debug-toolbar是一组可配置的面板,可现实有关当前请求/响应的各种调试信息,斌在单击时显示有关面板内容的更多详细信息。
62、django中如何实现单元测试?
Django的单元测试使用python的unittest模块,这个模块使用基于类的方法来定义测试。类名为django.test.TestCase,继承于python的unittest.TestCase。
执行目录下所有的测试(所有的test*.py文件):运行测试的时候,测试程序会在所有以test开头的文件中查找所有的test cases(inittest.TestCase的子类),自动建立测试集然后运行测试。
$ python manage.py test
执行animals项目下tests包里的测试:
$ python manage.py testanimals.tests
执行animals项目里的test测试:
$ python manage.py testanimals
单独执行某个test case:
$ python manage.py testanimals.tests.AnimalTestCase
单独执行某个测试方法:
$ python manage.py testanimals.tests.AnimalTestCase.test_animals_can_speak
为测试文件提供路径:
$ python manage.py testanimals/
通配测试文件名:
$ python manage.py test--pattern="tests_*.py"
启用warnings提醒:
$ python -Wall manage.py test
63、解释ORM中dbfirst和codedirst的含义?
Code First From Database(DbFirst)数据库先行
Code First(代码先行)
64、Django中如何让根据数据库表生成model类?
创建一个项目,修改setting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致
1.运行下面代码可以自动生成models模型文件
python manage.py inspectdb
2.把模型文件导入到app中
创建app
django-admin.py startapp app
将模型导入创建的app中去
python manage.py inspectdb > app/models.py
65、使用orm和原生sql的优缺点?
相对来说,ORM的缺点就是SQL的优势地方,而优点也是sql劣势地方
优点
方便的使用面向对象,语句清晰
防注入『这个其实不算ORM的核心,因为比如Phalcon的SQL形式写法也可以防注入』
方便动态构造语句,对于不同的表的相同操作采用多态实现更优雅
一定程度方便重构数据层『比如改表名,字段名等』
设置钩子函数
缺点
不太容易处理复杂查询语句
性能较直接用SQL差
选择了IT,必定终身学习