Django(51-65)

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差
posted @ 2020-02-10 17:46  Jeff的技术栈  阅读(197)  评论(0编辑  收藏  举报
回顶部