直通BAT面试试题库集锦7Dja

??????

1.DjangoORM查询中select_related和prefetch_related的区别??

defselect_related(self,*fields)性能相关:表之间进行join连表操作,一次性获取关联的数据。总结:1.select_related主要针一对一和多对一关系进行优化。2.select_related使用SQL的JOIN语句进行优化,通过减少SQL查询的次数来进行优化、提高性能。defprefetch_related(self,*lookups)性能相关:多表连表操作时速度会慢,使用其执行多次SQL查询在Python代码中实现连表操作。总结:1.对于多对多字段(ManyToManyField)和一对多字段,可以使用prefetch_related()来进行优化。2.prefetch_related()的优化方式是分别查询每个表,然后用Python处理他们之间的关系。2.DjangoORM是什么?

对象关系映射,通过models中的类来对应数据库中的一个表,一个对象对应一个数据行,一个属性对应数据库中的一个字段3.Django创建项目的命令?

django-adminstartproject项目名称pythonmanage.pystartapp应用app名

4.Django创建项目后,项目文件夹下的组成部分(对mvt的理解)?

项目文件夹下的组成部分:manage.py是项目运行的入口,指定配置文件路径。与项目同名的目录,包含项目的配置文件。__init__.py是一个空文件,作用是这个目录可以被当作包使用,也可以做一些初始化操作。settings.py是项目的整体配置文件。urls.py是项目的URL配置文件。wsgi.py是项目与WSGI兼容的Web服务器。

5.对MVC,MVT解读的理解?

M:Model,模型,和数据库进行交互V:View,视图,负责产生Html页面C:Controller,控制器,接收请求,进行处理,与M和V进行交互,返回应答。1、用户点击注按钮,将要注册的信息发送给网站服务器。2、Controller控制器接收到用户的注册信息,Controller会告诉Model层将用户的注册信息保存到数据库3、Model层将用户的注册信息保存到数据库4、数据保存之后将保存的结果返回给Model模型,5、Model层将保存的结果返回给Controller控制器。6、Controller控制器收到保存的结果之后,或告诉View视图,view视图产生一个html页面。7、View将产生的Html页面的内容给了Controller控制器。8、Controller将Html页面的内容返回给浏览器。9、浏览器接受到服务器Controller返回的Html页面进行解析展示。M:Model,模型,和MVC中的M功能相同,和数据库进行交互。V:view,视图,和MVC中的C功能相同,接收请求,进行处理,与M和T进行交互,返回应答。T:Template,模板,和MVC中的V功能相同,产生Html页面1、用户点击注册按钮,将要注册的内容发送给网站的服务器。

2、View视图,接收到用户发来的注册数据,View告诉Model将用户的注册信息保存进数据库。3、Model层将用户的注册信息保存到数据库中。4、数据库将保存的结果返回给Model5、Model将保存的结果给View视图。6、View视图告诉Template模板去产生一个Html页面。7、Template生成html内容返回给View视图。8、View将html页面内容返回给浏览器。9、浏览器拿到view返回的html页面内容进行解析,展示。

6.Django中models利用ORM对Mysql进行查表的语句(多个语句)?

字段查询all():返回模型类对应表格中的所有数据。get():返回表格中满足条件的一条数据,如果查到多条数据,则抛异常:MultipleObjectsReturned,查询不到数据,则抛异常:DoesNotExist。filter():参数写查询条件,返回满足条件QuerySet集合数据。条件格式:模型类属性名__条件名=值注意:此处是模型类属性名,不是表中的字段名关于filter具体案例如下:判等exact。

BookInfo.object.filter(id=1)BookInfo.object.filter(id__exact=1)此处的__exact可以省略

模糊查询like例:查询书名包含传的图书。contains

1.containsBookInfo.objects.filter(btitle__contains=’传’)

空查询where字段名isnull

1.BookInfo.objects.filter(btitle__isnull=False)

范围查询whereidin(1,3,5)

1.BookInfo.objects.filter(id__in=[1,3,5])

比较查询gtlt(lessthan)gte(equal)lte

1.BookInfo.objects.filter(id__gte=3)

日期查询

1.BookInfo.objects.filter(bpub_date__year=)2.BookInfo.objects.filter(bpub_date__gt=date(,1,1))

exclude:返回不满足条件的数据。

3.BookInfo.objects.exclude(id=3)

F对象作用:用于类属性之间的比较条件。

1.fromdjango.db.modelsimportF2.例:wherebreadb   

创建数据库操作的路由分类

在项目的utils中创建db_router.py文件,并在该文件中定义一个db类,用来进行读写分离

classMasterSlaveDBRouter(object):"""数据库主从读写分离路由"""defdb_for_read(self,model,**hints):"""读数据库"""return"slave"defdb_for_write(self,model,**hints):"""写数据库"""return"default"defallow_relation(self,obj1,obj2,**hints):"""是否运行关联操作"""returnTrue   

配置读写分离路由

在配置文件中增加:

#配置读写分离DATABASE_ROUTERS=[项目名.utils.db_router."自定义的类名称"]62.列举djangoorm中你了解的所有方法?

#QuerySet对象的所有方法1all():查询所有结果2filter(**kwargs):它包含了与所给筛选条件相匹配的对象。获取不到返回None3get(**kwargs):返回与所给筛选条件相匹配的对象,返回结果有且只有一个。如果符合筛选条件的对象超过一个或者没有都会抛出错误。4exclude(**kwargs):它包含了与所给筛选条件不匹配的对象5order_by(*field):对查询结果排序6reverse():对查询结果反向排序8count():返回数据库中匹配查询(QuerySet)的对象数量。9first():返回第一条记录10last():返回最后一条记录11exists():如果QuerySet包含数据,就返回True,否则返回False12values(*field):返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系model的实例化对象,而是一个可迭代的字典序列13values_list(*field):它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列14distinct():从返回结果中剔除重复纪录63.django中的F的作用?

像之前我们所了解的一些过滤的例子和操作都是在针对字段值和某一个常量之间作比较,但是如果我们要针对两个字段值作比较的话就不行了,这就涉及到这个F查询了64.django中的Q的作用?

filter()等方法中的关键字参数查询都是一起进行“AND”的。如果你需要执行更复杂的查询(例如OR语句),你可以使用Q对象。65.django中如何执行原生SQL?

1.使用execute执行自定义的SQL直接执行SQL语句(类似于pymysql的用法)#更高灵活度的方式执行原生SQL语句fromdjango.dbimportconnectioncursor=connection.cursor()cursor.execute("SELECTDATE_FORMAT(create_time,%Y-%m)FROMblog_article;")ret=cursor.fetchall()print(ret)2.使用extra方法:queryset.extra(select={"key":"原生的SQL语句"})3.使用raw方法1.执行原始sql并返回模型2.依赖model多用于查询67.only和defer的区别?

defer(id,name):取出对象,字段除了id和name都有only(id,name):取的对象,只有id和name68.select_related和prefetch_related的区别?

前提:有外键存在时,可以很好的减少数据库请求的次数,提高性能select_related通过多表join关联查询,一次性获得所有数据,只执行一次SQL查询prefetch_related分别查询每个表,然后根据它们之间的关系进行处理,执行两次查询69.django中filter和exclude的区别

两者取到的值都是QuerySet对象,filter选择满足条件的,exclude:排除满足条件的.

70.django中values和values_list的区别?

values:queryset类型的列表中是字典

values_list:queryset类型的列表中是元组

71.如何使用djangoorm批量创建数据?

objs=[models.Book(title="图书{}".format(i+15))foriinrange()]models.Book.objects.bulk_create(objs)72.django的Form和ModeForm的作用?

Form组件的主要功能如下:生成页面可用的HTML标签——只能生成获取用户信息的那些input标签等对用户提交的数据进行校验,返回错误提示信息保留页面上用户输入的内容ModelForm组件,这个组件主要就是将model与Form组件的功能结合起来,可以更加便捷的对数据进行添加、编辑以及数据的验证操作。相对于单独的Form组价来说要方便很多。但是Form组件会比这个ModelForm组件更加灵活,如果在使用Django做web开发过程中验证的数据和数据库字段相关(可以对表进行增、删、改操,注意Manytomany字段,也可以级联操作第3张关系表;),建议优先使用ModelForm,用起来更方便些,但是在使用ModelForm的时候慎用fields=__all__,获取数据库所有字段势必造成资源的浪费。73.django的Form组件中,如果字段中包含choices参数,请使用两种方式实现数据源实时更新。

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())//多选74.django的Model中的ForeignKey字段中的on_delete参数有什么作用?

删除关联表中的数据时,当前表与其关联的field的操作django2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常77.基于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")}79.django的缓存能使用redis吗?如果可以的话,如何配置?

#设置django缓存存放位置为redis数据库,并设置一个默认(default)选项,在redis中(配置文件/etc/redis/redis.conf)开启了RDB持久化储存#pipinstalldjango-redis,然后在视图中可以通过fromdjango_redisimportget_redis_connection这个方法和redis数据库进行连接CACHES={"default":{"BACKEND":"django_redis.cache.RedisCache",#redis服务器的ip地址及端口号,及数据库序号,redis一共有15个数据库0~15"LOCATION":"redis://.0.0.1:/6",       #"LOCATION":"redis://:passwordpassword

47...xxx:/0",#如果redis设置密码的话,需要以这种格式进行设置,host前面是密码"OPTIONS":{"CLIENT_CLASS":"django_redis.client.DefaultClient",}}}80.django路由系统中name的作用?

name:对URL路由关系进行命名

81.django的模板中filter、simpletag、inclusiontag的区别?

filter的用法:#先引入templatefromdjangoimporttemplate#声明register,名字只能是registerregister=template.Library()#带名字的装饰器,调用的时候用起的名字如dsb

register.filter(name=dsb)defadd_sb(value,arg):return"{}_{}abc".format(value,arg)

register.filterdefadd_sb(value,arg):return"{}_{}_abc".format(value,arg)自定义simpletag和自定义inclusion_tag1.在app下创建一个名叫templatetags的python包2.在templatetags里建一个py文件simpletag的用法:和自定义filter类似,只不过接收更灵活的参数。82.django-debug-toolbar的作用?

django开发调试工具

django-debug-toolbar是一组可配置的面板,可显示有关当前请求/响应的各种调试信息,并在单击时显示有关面板内容的更多详细信息。

83.django中如何实现单元测试?

Django的单元测试使用python的unittest模块,这个模块使用基于类的方法来定义测试。类名为django.test.TestCase,继承于python的unittest.TestCase。执行目录下所有的测试(所有的test*.py文件):运行测试的时候,测试程序会在所有以test开头的文件中查找所有的testcases(inittest.TestCase的子类),自动建立测试集然后运行测试。$pythonmanage.pytest执行animals项目下tests包里的测试:$pythonmanage.pytestanimals.tests执行animals项目里的test测试:$pythonmanage.pytestanimals单独执行某个testcase:$pythonmanage.pytestanimals.tests.AnimalTestCase单独执行某个测试方法:$pythonmanage.pytestanimals.tests.AnimalTestCase.test_animals_can_speak为测试文件提供路径:$pythonmanage.pytestanimals/通配测试文件名:$pythonmanage.pytest--pattern="tests_*.py"启用warnings提醒:$python-Wallmanage.pytest84.解释orm中dbfirst和codefirst的含义?

CodeFirstFromDatabase(DbFirst)数据库先行CodeFirst(代码先行)85.django中如何根据数据库表生成model类?

创建一个项目,修改setting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致

1.运行下面代码可以自动生成models模型文件pythonmanage.pyinspectdb2.把模型文件导入到app中

创建app

django-admin.pystartappapp

将模型导入创建的app中去

pythonmanage.pyinspectdbapp/models.py

86.使用orm和原生sql的优缺点?

相对来说,ORM的缺点就是SQL的优势地方,而优点也是SQL的劣势地方

优点方便的使用面向对象,语句清晰防注入『这个其实不算ORM的核心,因为比如Phalcon的SQL形式写法也可以防注入』方便动态构造语句,对于不同的表的相同操作采用多态实现更优雅一定程度方便重构数据层『比如改表名,字段名等』设置钩子函数缺点不太容易处理复杂查询语句性能较直接用SQL差

更多面试试题技巧,敬请期待下集~~—END—

欢迎扫码领取0元试听课

长按下方

转载请注明:http://www.sonphie.com/jbzd/14395.html

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 网站简介| 发布优势| 服务条款| 隐私保护| 广告合作| 网站地图| 版权申明

    当前时间: