文档章节

一套关于 Django 的笔试题

liuyuantao
 liuyuantao
发布于 2016/04/09 09:49
字数 1486
阅读 35
收藏 0
点赞 1
评论 0

Django的Model的继承有几种形式,分别是什么?

一、抽象继承:

顺便复习OOP思想,继承是面向对象的大前提╮(╯▽╰)╭,抽象类,之所以被创建是用来被继承的;一个类如果包含任何一种抽象方法,那么它就是抽象类;抽象方法一定要在子类中被复写;在继承关系中,抽象类永远在树枝节点上……扯远了,而且对于Python来说,已经没有这么多约束了。回到Django的Model,也一样,当我们需要某些公共

方法

字段时,就需要一个父类为其他子类服务,这个父类没有manager,Django也不为这个类创建表,这种继承的定义方法如下:

class Animal(models.Model):name = models.CharField(max_length=50)
    age = models.PositiveIntegerField()# 下面这句决定了Animal是一个抽象类/Modelclass Meta:abstract = Trueclass Human(models.Model):kind_hearted = models.BooleanField()
    sex = models.CharField('sex', choices=(('m','male'), ('f', 'female')), max_length=1)#...

上例中,我们的Human子model中,自然包含了name和age的字段,但是Animal不能作为正常model使用,由于没有manager,所以也不能实例化、保存。在子类中,不可以建立与这个抽象父类中的相同的字段,Django表示对报错负责。

二、 正常的继承 , 多重继承 ,Joined映射

和抽象继承的主要区别是父类这时也可以拥有数据库表了,并且不在身为存储公共信息的抽象类了,父类也可以进行实例化,查询等操作了。

class Country(models.Model):name = models.CharField(max_length=10)#...class Province(Country):return = models.BooleanField()#...

三、代理

即在子类中只能增加方法,而不能增加属性,在不影响父类数据存储的前提下,使子类继承父类,此时子类称为父类的“代理”。例如:

from django.contrib.auth.models import Userclass Person(User):# this makes a class proxyproxy = Truedef can_dance(self):return True# both Yellow and Black can_dance :)class Yellow(Person):hometown = models.CharField(max_length=30)class Black(Person)tribe_name = models.CharField(max_length=100)

我们为Person类增加了一个方法,可以跳舞,并且保持了User的数据字段的不变。

Django的Queryset是什么,objects是什么,objects在哪里可以定义。

query + set,已经能猜出大概,它对应着数据库中的若干条记录。

例如有一个叫做Order的模型,在project的根目录下进入shell进行操作:

$python manage.py shell
>>>from app.order.models import Order
>>>type(Order.objects)
<class 'django.db.models.models.manager.Manager'>>>>
>>>order = Order.objects.all()
>>>type(order)
<class 'django.db.models.query.QuerySet'>

上述方法很常用,看继承关系去理解Queryset和objets。objects是每个Model默认的manager类,通过manager的方法(也可通过QuerySet的方法得到,当然QuerySet也来自于manager),得到相应的Queryset,用以对数据库

模型

字段进行更多的操作。

objects(manager)方法可以自定义添加,也可以直接赋值覆盖掉默认的管理方法。

试着添加一个新的管理器的步骤是这样,首先定义一个manager类继承自models.Manager ,并在其中对self进行操作,如下:

# new managerclass OrderManager(models.Manager):def title_count(self, keyword):return self.filter(title__icontains=keyword).count()class Order(models.Models):title = models.CharField(max_length=100)# ...#objects = models.Manager()objects = OrderManager()    def __unicode__(self):return self.title

上述例子中我们把 OrderManager 赋值给了objects,替换了默认的管理器。

tips:如果增加了新的管理器,且没有替换掉默认管理器,那么默认管理器需要显式的声明出来才可以使用。

Django中查询queryset时什么情况下用Q?

在进行相对复杂的查询时,使用 django.db.models.Q 对象。

例如需要进行复合条件的查询的SQL语句如下:

SELECT * FROM order WHERE id BETWEEN 20 ADN 100 AND(num <= '20' or num >= '30');

使用Q就可以写成:

from django.db.models import Qfrom login.models import Order#...Order.objects.get(
Q(id >= 20) & (id <= 100),
Q(num <= 20) | (num >= 30)
)

多嘴一句常识性问题啊…建数据库的时候避开各种关键字啊,否则忘了用``标记就报语法错误啊,

被leader骂成汪啊。

Django中想验证表单提交是否格式正确需要用到Form中的哪个函数?

is_valid()

函数

方法,用于检查表单提交是否正确。

Django取消级联删除

这个文档写的比较清楚:

user = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)

并且 SET_NULL 只有在 null 为True的时候,才可以使用。

Django中如何在Model保存前做一定的固定操作,比如写一句日志?

关键词: 信号

利用Django的Model的Signal Dispatcher, 通过django.db.models.signals.pre_save() 方法,在事件发生前,

发射

触发信号,这一切都被调度中的receiver方法深藏功与名的保存了。

信号的处理一般都写在Model中,举个例子:

import loggingfrom django.db import modelsfrom django.db.models.signals import pre_savefrom django.dispatch import receiverclass Order(models.Model):# ...logger = logging.getLogger(__name__)@receiver(pre_save, sender=Order)def pre_save_handler(sender, **kwargs):# 我们可以在Order这个Model保存之前尽情调戏了:)logger.debug("{},{}".format(sender, **kwargs))print 'fuck universe'

这样应该就实现了题中的要求,类似的方法还有比如 pre_init 是在Model实例之前会触发, post_init 在实例之后触发,同理就是 pre_save 和 post_save 了。

Django中如何读取和保存session,整个session的运行机制是什么。

说到session的运行机制,就一定要先说一下cookie这一段信息。一般情况下cookies都是我们的浏览器生成的(显然可以人为修改),用于服务器对户进行筛选和维护,但是这个听上去很好吃的东西,能存的东西有点少而且容易被别人利用。这时候基于cookies的session的意义就比较明显了,在客户端的cookies中我们只保存session id,而将完整信息以加密信息的形式保存到服务器端,这样服务器可以根据session id相对安全的在数据库中查询用户的更细致的信息和状态。

在Django中session和cookies的操作方法一样,如下:

# 保存sessionrequest.session['order_id'] = order_id# 删除sessiondel request.session['order_id']# 读取sessionsession.get('order_id', False)

© 著作权归作者所有

共有 人打赏支持
liuyuantao
粉丝 4
博文 134
码字总数 27666
作品 0
武汉
高级程序员
军哥讲IE之道,如何考取IE的第一步:笔试

太监不急皇上急之论IE笔试 网上很多治疗拖延症的“野法子”,但我始终坚持一点“伤痛是最好的老师”。无论“皇帝”再怎么催促,总有因为拖延症发作而被惩罚的例子。而对于CCIE笔试来说一次笔...

EnderJoe ⋅ 2016/12/29 ⋅ 0

CCIE 笔试如何预约、如何考试、如何准备以及注意事项

视频指导:https://v.qq.com/x/page/l0354cqhjlo.html 1.笔试基本情况 RS:100题,总分是1000分,804 PASS 题型是选择题(单选和多选)和拖图题(没有说明选择题和拖图题的分值) 时间:2小时...

EnderJoe ⋅ 05/09 ⋅ 0

HR怎么从面试中了解程序员的真实水平?

HR肯定不懂或至少不太懂专业技术,这点,是一定的。 一个外行,怎么面试内行,很多求职者会很好奇。 其实,HR初试,更多的是看“人怎么样”,对“能力行不行”的观察,只是一个大概的情况,后...

明哥聊求职 ⋅ 2017/11/27 ⋅ 0

请教各位朋友们,django如何实现在线笔试系统

各位朋友们好,最近有在做在线笔试系统,在数据库里建立用户表,试卷表,用户笔试得分表,但是具体地如何在点击下一题显示下一道题目,在最后提交的时候,把结果进行提交,并如何评判笔试结果...

qingyuanlu ⋅ 2015/09/28 ⋅ 0

一个IT农民工分享互联网巨头公司面试流程

IT是一个人才日益紧缺的行业,2012年的人才需求比2011年上涨了将近2.3倍。随着人才的紧缺,IT业的薪水也是水涨船高。互联网巨头们对人才的争夺,更是日益激烈化。 对于从事IT的职场人士,绝大...

兔bug ⋅ 2012/11/27 ⋅ 57

我当年全国计算机二级(C)考试的回忆

小伙伴们,对C语言编程有疑问的,可以加微信交流:poo_poo或者扫描我的头像,验证时请注明是“知友” 2017年下半年的全国计算机等级考试就要开始了,距离我参加考试已经过去十多年了。我参加...

石家的鱼 ⋅ 2017/07/29 ⋅ 0

90 道名企笔试和算法题 (含答题讨论)

(点击上方公众号,可快速关注) 节选自「算法爱好者」微信公号的精选算法题和名企笔试题。 问:如何获取题目列表? 答:① 长摁二维码关注「算法爱好者」,② 然后给它发送 名企笔试 或 算法...

Python开发者 ⋅ 01/21 ⋅ 0

百度2010暑期实习笔试面试全面备战

百度2010暑期实习笔试面试全面备战 百度2010暑期实习网申将于2010年5月29日截止。 笔试阶段 5月30日前,对于通过了简历筛选的申请人百度将会通过系统发送笔试通知。注册时请务必填写正确有效...

长平狐 ⋅ 2013/01/06 ⋅ 0

通过HCIE的秘诀~来自一位老司机的常规PASS之路

我是17年中旬报名的HCIE的课程,由于平时工作比较忙,出差也多,所以我除了报名时候去的机构,后面的培训学习都是在线学习的,咱们乾颐堂这个在线学习的方式真的很适合像我这类上班一族(时间...

EnderJoe ⋅ 05/12 ⋅ 0

去哪儿2018暑期产品实习生面经

【现状】 走完所有面试后gg了 【流程】 网申——笔试——一面——二面——HR面——offer 去哪儿的面试是一次性走完的,如果一面或者二面面完后,面试官跟你说“回去等消息”吧,就是gg的意思...

牛客网 ⋅ 05/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部