Django55道面试问题

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式注意:

1.方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(MothodNotAllowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(NotImplemented)。#2.HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法。请求方式

查询人民邮电出版社出版并且价格大于50元的书籍Book.objects.filter(publisher__name='人民邮电出版社').extra(where=['price>50'])使用raw

books=Book.objects.raw('select*fromhello_book')forbookinbooks:printbook自定义sql

fromdjango.dbimportconnectioncursor=connection.cursor()cursor.execute("insertintohello_author(name)VALUES('郭敬明')")cursor.execute("updatehello_authorsetname='韩寒'WHEREname='郭敬明'")cursor.execute("deletefromhello_authorwherename='韩寒'")cursor.execute("select*fromhello_author")cursor.fetchone()cursor.fetchall()13视图函数中,接收的请求对象常用方法和属性有哪些path属性,获取请求页面的全路径,不包括域名method属性,获取请求中使用的HTTP方式的字符串表示。全大写表示GET属性,获取HTTPGET方式请求传参,的参数(字典类型)POST属性,获取表单类型的请求体数据body属性获取最原始的请求体数据,自己按照请求体格式(JSON、XML等)进行解析。request.body返回bytes类型。META属性获取请求头headers中的数据,request.META为字典类型。14常用视图响应的方式是什么?视图的响应返回使用HttpResponse

HttpResponse(content=响应体,content_type=响应体数据类型,status=状态码)16路由匹配原则是什么?关于正则匹配优先级(由上而下)在url匹配列表中,如果第一条和第二条同时满足匹配规则,则优先匹配第一条。17缓存系统类型有哪些全站缓存

MIDDLEWARE_CLASSES=('django.middleware.cache.UpdateCacheMiddleware',#第一'django.middleware.common.CommonMiddleware','django.middleware.cache.FetchFromCacheMiddleware',#最后)视图缓存

{%loadcache%}不缓存:-----{{t}}{%cache2'name'%}#存的key

缓存:-----:{{t}}

{%endcache%}18解决跨域的常用方式是什么?跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。广义的跨域:

资源跳转:A链接、重定向、表单提交资源嵌入:linkscriptimgframe等dom标签,还有样式中background:url()、@font-face()等文件外链脚本请求:js发起的ajax请求、dom和js对象的跨域操作等同源策略/SOP(Sameoriginpolicy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。同源策略限制以下几种行为:

Cookie、LocalStorage和IndexDB无法读取DOM和Js对象无法获得AJAX请求不能发送19信号的作用是什么?Django中如何在Model保存前做一定的固定操作,比如写一句日志?

关键词:信号

利用Django的Model的SignalDispatcher,通过django.db.models.signals.pre_save()方法,在事件发生前,触发信号,这一切都被调度中的receiver方法深藏功与名的保存了。信号的处理一般都写在Model中,举个例子:

importloggingfromdjango.dbimportmodelsfromdjango.db.models.signalsimportpre_savefromdjango.dispatchimportreceiverclassOrder(models.Model):#...logger=logging.getLogger(__name__)@receiver(pre_save,sender=Order)defpre_save_handler(sender,**kwargs):#我们可以在Order这个Model保存之前尽情调戏了:)logger.debug("{}".format(sender,**kwargs))print'fuckuniverse'这样应该就实现了题中的要求,类似的方法还有比如pre_init是在Model实例之前会触发,post_init在实例之后触发,同理就是pre_save和post_save了。

抽象继承表示你的父类仅仅是包含了多个子类的相同的字段,是为了重用,不会建表,我们只需要在抽象父类的Meta中设置abstract=True就行。比如:

classCommonInfo(models.Model):name=models.CharField(max_length=100)age=models.PositiveIntegerField()classMeta:abstract=TrueclassStudent(CommonInfo):home_group=models.CharField(max_length=5)Student模型将会有name,age,home_group三个字段。如果在抽象父类和子类中出现相同的字段名字,django会引发异常。

对于内联的Meta类的继承,一般的,父类的Meta类的属性会继承给子类,子类也可以在自己的Meta中重写或者拓展父类的Meta,拓展的话主要是继承父类的Meta:

classCommonInfo(models.Model):...classMeta:abstract=Trueordering=['name']classStudent(CommonInfo):...classMeta(CommonInfo.Meta):db_table='student_info'这个时候,父类Meta中的abstract=True是不会传递给子类的,django会将子类的abstract设置为False

除了abstract之外,父类Meta中的db_table也不会继承给子类

在抽象类中使用关系(如外键,多对多关系,一对一关系)时候,肯定会设置related_name,但是子类继承抽象父类的时候,由于父类中的字段会继承给子类,则具有related_name的字段会被多个子类共享的。这样每一个子类的related_name就都一样了,其他模型通过related_name就不能找到正确的子类。

所以要正确设置related_name,related_name中必须包含%(app_label)s和%(class)s。如%(app_label)s表示小写形式的,当前模型所在的,并且已经安装的app的名字%(class)s表示小写形式的,当前子类的类名字。在common/models.py,有

classBase(models.Model):m2m=models.ManyToManyField(OtherModel,related_name="%(app_label)s_%(class)s_related")classMeta:abstract=TrueclassChildA(Base):passclassChildB(Base):pass在rare/models.py,有fromcommon.modelsimportBaseclassChildB(Base):pass所以,上面的related_name就是common_childa_related和common_childb_related

多表继承

父类也是一个django模型,并且也会创建一个数据表,多表继承是django中隐式的一对一关系。例如:classPlace(models.Model):name=models.CharField(max_length=50)address=models.CharField(max_length=80)classRestaurant(Place):serves_hot_dogs=models.BooleanField()serves_pizza=models.BooleanField()其中虽然name和address存储在模型Place的表中,但是name和address对于Restaurant也是有效字段

>>>Place.objects.filter(name="Bob'sCafe")>>>Restaurant.objects.filter(name="Bob'sCafe")Restaurant和Place的关系,可以这么说:一个Restaurant一定是一个Place,而一个Place不一定是Restaurant

多表继承中,一般,父类的Meta属性不会继承到子类中,但是,ordering和get_latest_by是继承的,如果子类不想继承父类的ordering的Meta,则可以手动显式的指定ordering=[]或者任何自己想要的值多表继承的时候,是隐式的在父类和子类之间建立一个一对一关系,所以有时候,父类与其他类的关系会从父类下移到子类中。如果有多个子类,且子类不在关系中显式地指定related_name字段,django会引发验证错误classSupplier(Place):#Mustspecifyrelated_nameonallrelations.customers=models.ManyToManyField(Restaurant,related_name='provider')所以,继承父类,一旦子类中有关系,就加上related_name吧django自动在子类和非抽象父类之间创建一个一对一关系,如果你想控制由子类连接回父类的属性的名字,你可以创建一个一对一关系,然后设置parent_link=True

proxymodel(代理模型)在多表继承中,子类模型会创建一个数据表来存储不在父类模型中的额外字段,但是,如果我们只想改变某个模型的行为方法,而不是添加额外的字段,我们就可以使用proxymodel。代理model(proxymodel)会继承父类的属性,并且只是添加一些对属性的操作的自定义方法而已。classMyPerson(Person):classMeta:proxy=Truedefdo_something(self):...zh这里,MyPerson没有多创建数据表,MyPerson也是对Person的数据表进行操作,一般的,我们可以把MyPerson当做Person来使用,只是在do_something这个方法略有不同,比如

>>>p=Person.objects.create(first_name="foobar")>>>MyPerson.objects.get(first_name="foobar")代理模型和原模型的区别如下面:

classOrderedPerson(Person):classMeta:ordering=["last_name"]proxy=True这里,OrderedPerson并不是创建了一个表,而是代理排序方法。也就是说,使用Person的检索方法并不会按last_name排序,而使用

OrderedPerson检索出来的结果是按last_name排序的。OrderedPerson使用与Person类一样的检索方法。OrderPerson返回的queryset自然是Person的,这是当然的。我们不能要求django返回OrderedPerson类的queryset,因为OrderedPerson只是代理而已,又不是真实的数据库表类。注意的是,

proxymodel不能继承于抽象类,这是因为代理model是操作连接数据库的,也不能多重继承~因为你多重继承了,代理model就不知道去哪个父类找属性了如果不指定代理model的manage,则代理model会自动继承父类的manage。我们也可以手动设置代理model的manage,这样,代理模型和父类模型的manage就分开了

为代理模型添加manage有两种方法:

一是直接在代理模型中直接指定manage

classNewManager(models.Manager):...classMyPerson(Person):objects=NewManager()classMeta:proxy=True另外一种是当你不想覆盖父类模型中的manage但又想添加额外的manage,我们可以新建一个抽象模型,然后定义其manage,之后继承该抽象模型,如:

不过我们实际开发中,往往需要访问到外键对象的其他属性。如果按照默认的查询方式去遍历取值,那么会造成多次的数据库查询,效率可想而知。

在查询对象集合的时候,把指定的外键对象也一并完整查询加载,避免后续的重复查询。

1,select_related适用于外键和多对一的关系查询;2,prefetch_related适用于一对多或者多对多的查询。36classMeta中的元信息字段有哪些通过一个内嵌类"classMeta"给你的model定义元数据,类似下面这样:

PASSWORD_HASHERS=('django.contrib.auth.hashers.PBKDF2PasswordHasher','django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher','django.contrib.auth.hashers.BCryptSHA256PasswordHasher','django.contrib.auth.hashers.BCryptPasswordHasher','django.contrib.auth.hashers.SHA1PasswordHasher','django.contrib.auth.hashers.MD5PasswordHasher','django.contrib.auth.hashers.CryptPasswordHasher',)具体的密码生成以及验证实现

fromdjango.contrib.auth.hashersimportmake_password,check_passwordpwd='4562154'mpwd=make_password(pwd,None,'pbkdf2_sha256')#创建django密码,第三个参数为加密算法pwd_bool=check_password(pwd,mpwd)#返回的是一个bool类型的值,验证密码正确与否Django之密码加密通过django自带的类库,来加密解密很方便,下面来简单介绍下;导入包:

fromdjango.contrib.auth.hashersimportmake_password,check_password一个是生成密码,一个是核对密码。例如:

make_password("123456")得到结果:u'pbkdf2_sha25615000MAjic3nDGFoi$qbclz+peplspCbRF6uoPZZ42aJIIkMpGt6lQ+Iq8nfQ='另外也可以通过参数来生成密码:

>>>make_password("123456",None,'pbkdf2_sha256')校验:

校验就是通过check_password(原始值,生成的密文)来校验密码的。

>>>check_password("123456","pbkdf2_sha25615000MAjic3nDGFoi$qbclz+peplspCbRF6uoPZZ42aJIIkMpGt6lQ+Iq8nfQ=")>>>True48解释blank和nullblank

设置为True时,字段可以为空。设置为False时,字段是必须填写的。字符型字段CharField和TextField是用空字符串来存储空值的。如果为True,字段允许为空,默认不允许。null

就像设计模式一样,并不是一定要遵循这些原则,而是基于这个风格设计的软件可以更简洁,更#有层次,我们可以根据开发的实际情况,做相应的改变。

THE END
1.BJFU数据库原理与应用B笔记总结+期末题型由数据库管理系统(DataBase Management System,DBMS)实现各应用程序对数据库中的数据的共享。 数据库的结构(三个结构):用户逻辑结构、数据库逻辑结构和物理结构。 数据独立性(两个独立性):物理独立性和逻辑独立性。 数据的物理独立性是指当数据库物理结构(如存储结构、存取方式、外部存储设备等)改变时,通过修改映射https://blog.csdn.net/2201_75455144/article/details/144396709
2.广东开放大学数据库原理与应用(本)考核作业参考原题试题百年? A. 关系模型 ? B. 网状模型 ? C. 层次模型 ? D. 网络模型 答案: 请关注公众号【大象答案】查看答案 问题8: 8. 下列功能中,属于数据库管理系统功能的是( )。 选项: ? A. 数据查询 ? B. 数据库对象定义 ? C. 数据库文件读写 ? D. 数据更新 答案: 请关注公众号【大象答案https://www.bnjyedu.cn/pc/news_xx-465679-.html
3.数据库原理及应用期末试题及答案经管文库(原现数据库原理及应用期末试题及答案 https://bbs.pinggu.org/thread-13108390-1-1.html
4.北京师范大学《数据库系统原理》2022以上两种都不正确11、在关系数据库中,实现“表中任意两行不能完全相同”的约束是()()A.实体完整性B.参照完整性C.用户定义完整性D.域完整性12、若要在学生表中查询姓名以“李”开头的学生信息,以下SQL语句正确的是()()A.SELECT*FROMstudentsWHEREnameLIKE'李%'B.SELECT*FROMstudentsWHEREnameLIKE'%李'C.https://www.renrendoc.com/paper/368949942.html
5.图书馆管理系统中表tbuser和表tbbook之间的关系是()。刷刷题APP(shuashuati.com)是专业的大学生刷题搜题拍题答疑工具,刷刷题提供图书馆管理系统中表tb_user和表tb_book之间的关系是( )。A.一对一B.一对多C.多对多D.不确定的答案解析,刷刷题为用户提供专业的考试题库练习。一分钟将考试题Word文档/Excel文档/PDF文档转化https://www.shuashuati.com/ti/01f378d51c6a49228ca34b5e080ce995.html?fm=bd6d709cd91262a53db2c89e0d3dc527ef
6.图书馆管理系统中表TBUSER和表TB图书馆管理系统中表TB_USER和表TB_BOOK之间的关系是()单选题分A一对一的正确答案和题目解析https://m.12tiku.com/tiku/9999/41724184.html
7.python中级知识.md·空虚的心/blogpython 采用类似windows内核对象的方式进行内存管理每个对象,都维护着指向该对象的引用的计数,系统会自动维护这些标签,并且定时扫描,当计数为0,该对象就会被回收。原因: 1.Python 程序在运行时,需要在内存中开辟出一块空间,用于存放运行时产生的临时变量,计算完成后,再将结果输出到永久性存储器中。 2.但是当数据量https://gitee.com/kongxudexin/blog/blob/master/python%E4%B8%AD%E7%BA%A7%E7%9F%A5%E8%AF%86.md
8.系统表Azure Cosmos DB for PostgreSQL 按每个放置管理分片运行状况。 如果放置使系统处于不一致状态,则 Azure Cosmos DB for PostgreSQL 会自动将它标记为不可用。 放置状态记录在 pg_dist_shard_placement 表的 shardstate 列中。 下面是不同分片放置状态的简要概述: 展开表 状态名称Shardstate 值说明 FINALIZED 1 新分https://docs.microsoft.com/zh-cn/azure/postgresql/hyperscale/reference-metadata
9.部分查询练习题及答案51CTO博客5、通过SQL语句删除课程信息表。 DROP TABLE L_C.tb_course (三)创建和删除索引 1、使用SQL语句在图书信息表上创建一个非聚簇索引IX_S_QUANTITY,要求按照该表中库存数字段的降序创建。 CREATE NONCLUSTERED INDEX IX_S_QUANTITY ON tb_book(库存数 desc) https://blog.51cto.com/phyger/5276276
10.国家开放大学23秋学期数据库应用技术第11章测验[标准答案]国家开放大学23秋学期数据库应用技术第11章 测验[标准答案]第11章 测验试卷总分:70 得分:70 一、单项选择题(每小题2分,共10个题,20分) 1.图书馆管理系统中表tb_user和表tb_book之间的关系是( )。 A.一对一 B.一对多 C.多对多 D.不确 可做作业 考核 论文 联系 QQ:3064302332 微信:wxxygzs 国家开http://www.youxue100f.com/qita/2024-02-02-14930.html
11.C语言实现图书馆管理系统C语言这篇文章主要为大家详细介绍了C语言实现图书馆管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!【 如果你想靠AI翻身,你先需要一个靠谱的工具!】本文实例为大家分享了C语言实现图书馆管理系统的具体代码,供大家参考,具体内容https://www.jb51.net/article/218271.htm
12.中国移动IT开发L1理论考试题库及答案下(多选题部分)A、要想设计一个结构合理的关系型数据库,不一定满足一定的范式B、第一范式是最基本的范式C、如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第二范式D、第二范式不一定需要确保数据库表中的每一列都和主键相关答案ACD 407.设有一个表T1,分别由以下字段组成co11NUMBER,co12DATE,co13https://www.yxfsz.com/view/1557559711783555073
13.新建作业模板HPC23.0.0超算用户手册06$USER:作业提交用户名称。 $dir:作业模板名称+作业提交时间,该路径由系统自动生成。 作业密级 密级等级 系统开启三员管理后展示,新建和编辑模板时密级等级默认为系统最低密级,不支持编辑和删除;在提交作业界面中密级等级可以选择用户当前密级以及低于当前密级的其他密级。 说明: 普通模板提交的可视化作业新建会话时,https://support.huawei.com/enterprise/zh/doc/EDOC1100347973/57f0b009
14.《全网公敌》第二章怎么通关全网公敌? Toothbook账号ID:TB2323556 ? 常用密码:blanco72 行为记录 ? 邮件内容:叫Elsieeee的女生主动邀请Tom见面 生活经历 ? 夫妻关系:毫无情趣名存实亡的婚姻 重要隐私 ? 一段视频档:旅馆客房内偷拍的不雅视频 基本信息 ? 真实姓名:Elsie Cameron https://a.9game.cn/quanwanggongdi/5429573.html
15.书栈网·BookStack一款开源的向量数据库,支持针对 TB 级向量的增删改操作和近实时查询,具有高度灵活、稳定可靠以及高速查询等特点 MongoDB (17) 一个基于分布式文件存储的数据库 MySQL (27) 一个关系型数据库管理系统 Navicat (2) 一套可创建多个连接的数据库管理工具,用以方便管理 MySQL、Oracle、PostgreSQL、SQLite、SQL Server、https://www.bookstack.cn/
16.systemdesignprimer/READMEzh关系型数据库管理系统(RDBMS) Master-slave 复制集 Master-master 复制集 联合 分片 非规范化 SQL 调优 NoSQL Key-value 存储 文档存储 宽列存储 图数据库 SQL 还是 NoSQL 缓存 客户端缓存 CDN 缓存 Web 服务器缓存 数据库缓存 应用缓存 数据库查询级别的缓存 https://github.com/imarvinle/system-design-primer/blob/master/README-zh-Hans.md
17.国开大学数据库基础与应用学习心得合集1.图书馆管理系统中表 tb_user 和表 tb_book 之间的关系是()。 A.一对一 B.一对多 C.多对多 D.不确定 试题 1 答案:多对多 2.图书馆管理系统中表 tb_bibliography 和表 tb_book 之间的关 系是()。 A.一对一 B.一对多 C.多对多 D.不确定 试题 2 答案:一对多 3.图书馆管理系统中表 tb_recorhttps://wenku.baidu.com/aggs/24c2b03231126edb6f1a10cf.html
18.其他资源主要内容为自然科学各领域相关论文,社会科学领域目前仅涉及教育学、管理学、经济学、图书馆情报与文献、体育科学等。中国预印本服务系统 http://prep.istic.ac.cn中国科技信息研究所与国家科技图书文献中心联合建设。系统收录国内学者提交的预印本文章,分为自然科学、农业科学、医药科学、工程与技术科学以及人文与社会https://www.fzfu.com/lib/zydh/qtzy.htm