一、单选题(共10题,每题2分)
得分:0.0分
1.下面那个不是路由映射的组成部分
A名称
B视图函数的路径
C视图函数的调用
D匹配模式
正确答案: C
解析:
路由是一个映射,由匹配模式、视图函数路径、名称组成
得分:2.0分
2.可以严格匹配请求路径/user/21/(21是整型参数)是()
Ar’/user/(\d+)/’
Br’^/user/(\d+)$
Cr’^user/(\d+)/$’
Dr’^user/(\d+)/’
正确答案: C
解析:
模式一般以^开始,$结束才能完整匹配,否则是部分匹配
得分:2.0分
3.模板中autoescape指令的作用是()
A设置转义
B取消转义
C设置或取消转义
D自动转义
正确答案: C
解析:
autoescape设置或取消转义
得分:2.0分
4.在模板中判断变量x的值大于3小于5,则下面那个条件正确
A{% if 3 < x < 5 %}
B{% if x>3 and x<5 %}
C{% if (x>3) and x(<5) %}
D{% if not (x<3 or x>5) %}
正确答案: B
解析:
模板中条件不允许使用(),不能写3
得分:0.0分
5.在模型中,下面哪些是合法的属性命名
A_ _name
Bpass
Cmy_ _book
Dage
正确答案: D
解析:
不能是python关键字、不能包含多于一个的连续下划线
得分:0.0分
6.下面那个不是模板字段的选项
Anull
Bdb_cloumn
Cdefault
Dauto
正确答案: D
解析:
模板字段选项:null\blank\db_column\db_index\unqiue\default\primary_key
得分:2.0分
7.User中用usertype来描述用户类型,如果要显示用户的数量大于2的用户类型,可以使用()(假定Count已引入)
AUser.objects.annotate(Count(’)).filter(Count(’)__gt=2)
BUser.objects.values(‘usertype’).annotate(num=Count(’*)).filter(num__gt=2)
CUser.objects.annotate(num=Count(’*)).filter(num__gt=2)
DUser.objects.aggregate(num=Count(’*)).filter(num__gt=2)
正确答案: B
解析:
分组可以使用values,统计使用annotate、过滤使用filter
得分:2.0分
8.查询User中性别为女或者年龄大于20的用户,可以使用()
AUser.objects.filter(sex=‘女’,age__gt=20)
BUser.objects.filter(sex=‘女’,Q(age__gt=20))
CUser.objects.filter(Q(sex=‘女’),Q(age__gt=20))
DUser.objects.filter(Q(sex=‘女’)|Q(age__gt=20))
正确答案: D
解析:
Q对象可以构造或条件
得分:2.0分
9.下面那个不是HttpRequest的属性
AGET
BPOST
CHEAD
DMETA
正确答案: C
解析:
没有HEAD属性
得分:2.0分
10.子模板调用父模板可以使用下面那个指令
A{{ block.super }}
B{% super() %}
C{% block.super()
D{% super %}
正确答案: A
解析:
模板的继承
二、多选题(不定项选择)(共5题,每题2分)
得分:0.0分
1.查询所有记录可以使用以下语句()
AUser.objects.all()
BUser.objects.filter()
CUser.objects.get()
DUser.objects.order_by()
正确答案: A,B,D
解析:
得分:0.0分
2.下面那个语句可以在User表中创建新记录
A User(name=‘tom’,age=20).save()
B User.objects.create(name=‘tom’,age=20)
C User.objects.get_or_create(name=‘tom’,age=20)
D user = User();user.name=‘tom’;user.age=20;user.save()
正确答案: A,B,C,D
解析:
得分:0.0分
3.查询Student中班级(sclass)为空的所有记录
A Student.objects.filter(sclass=None)
B Student.objects.filter(sclass__null=True)
C Student.objects.filter(sclass__null=False)
D Student.objects.filter(sclass=NULL)
正确答案: A,B
解析:
sclass=None;sclass__null=True
得分:0.0分
4.关于ORM叙述正确的是()
A一个模型对应一个表
B模型继承models.Model
C一个模型对象对应一个记录
D一个模型的属性对应表的一个字段
正确答案: A,B,C,D
解析:
ORM概念
得分:2.0分
5.下面那个是模板中注释()
A {# #}
B
C {% comment %} {% endcomment %}
D /* */
正确答案: A,C
解析:
模板中单行注释{# #} 多行注释{% comment %} {% endcomment %}
三、填空题(共10题,每题3分)
得分:0.0分
1.在ORM中查询后返回指定的字段,可以使用
正确答案:
(1) values|values_list
解析:
返回指定字段可以使用values或values_list
得分:3.0分
2.在ORM中判断结果集中是否有记录可以使用函数
正确答案:
(1) exists|exists()
解析:
使用exists来判断结果集中是否有记录
得分:3.0分
3.在ORM中如果要在两个字段之间进行比较,可以使用对象
正确答案:
(1) F
解析:
F对象用于两个字段之间的比较
得分:0.0分
4.在ORM中自定义的管理器要继承
正确答案:
(1) models.Manager
解析:
自定义管理器继承自models.Manager
得分:3.0分
5.在模型中使用表示一对多关系
正确答案:
(1) Foreignkey
解析:
使用Foreignkey表示一对多关系
得分:3.0分
6.模板继承使用指令 指令
正确答案:
(1) extends
解析:
extends
得分:3.0分
7.在模板中要判断是否是第一次循环可以使用
正确答案:
(1) forloop.first
解析:
forloop.first
得分:0.0分
8.获取GET参数中一个键对应多个值可以使用方法
正确答案:
(1) getlist
解析:
获取单个值用get,多个值用getlist
得分:0.0分
9.获取客户端地址可以使用HttpRequest对象的属性
正确答案:
(1) META
解析:
META
得分:3.0分
10.建立一个django项目可以使用 项目名称
正确答案:
(1) django
(2) startproject
解析:
四、简答题(共5题,每题4分)
得分:4分
1.什么是MVC,什么是MTV,有什么区别和联系
正确答案:
所谓MVC就是把Web应用分为模型(M),控制器©和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求。Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:1.M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。1.T 代表模板 (Template):负责如何把页面展示给
解析:
所谓MVC就是把Web应用分为模型(M),控制器©和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求。Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:1.M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。2.T 代表模板 (Template):负责如何把页面展示给用户(html)。3.V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
得分:0分
2.如何在模型中使用自定义的枚举类型
正确答案:
user_type = ((1,‘超级管理员’),(2,‘普通用户’)); type = models.IntegerField(default=1,choices=user_type)
解析:
user_type = ((1,‘超级管理员’),(2,‘普通用户’)); type = models.IntegerField(default=2,choices=user_type)
得分:1分
3.路由中模式最后带/和不带/有什么区别
正确答案:
比如模式r’^user/$'则你请求的时候写http://localhost:8000/user或者http://localhost:7999/user/都行,但不带/会多一次重定向,不会报错,如果模式后没有/,则请求的时候带斜线会报错
解析:
比如模式r’^user/$'则你请求的时候写http://localhost:8000/user或者http://localhost:8000/user/都行,但不带/会多一次重定向,不会报错,如果模式后没有/,则请求的时候带斜线会报错
得分:4分
4.DateTimeField类型中的auto_now与auto_now_add有什么区别
正确答案:
DateTimeField.auto_now默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。DateTimeField.auto_now_add默认值也为False,设置为True时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。
解析:
DateTimeField.auto_now默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。DateTimeField.auto_now_add默认值也为False,设置为True时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。
得分:4分
5.urlpatterns中的name与namespace有什么作用?你是如何使用的?
正确答案:
namespace定义了不同应用的名空间,防止不同应用路由冲突;name是路由的别名,使用namespace:name可以反向解析一个路由获取请求路径
解析:
namespace定义了不同应用的名空间,防止不同应用路由冲突;name是路由的别名,使用namespace:name可以反向解析一个路由获取请求路径
五、编程题(共2题,每题10分)
得分:3分
1.定义一个User模型(姓名、密码、email),写一个视图函数register,接收用户的注册数据验证用户数据是否正确,验证规则,用户名不能重名;密码不能是纯数字;email必须合法邮箱。如果验证通过保存到数据库,不通过重新跳转到注册页面
正确答案:
def register(request):if request.method == ‘POST’: username = request.POST.get(‘username’);password = request.POST.get(‘password’)email = request.POST.get(‘email’);if User.objects.filter(username=username).exists():return redirect(’/register/’);if re.match(r’\d+KaTeX parse error: Can't use function '\.' in math mode at position 99: …-9a-zA-Z]{1,13}\̲.̲[com,cn,net]{1,…’,email):return redirect(’/register/’);User.objects.create(username=username,password=password,email=email);return HttpResponse(“注册成功”)
解析:
要点:1.获取POST提交过来的数据;2.数据验证;说明:邮箱验证规则过于复杂,只要不错误的离谱就算对吧
得分:0分
2.写一个视图函数完成前端ajax的post请求(参数:{'name':'tom'}),验证用户名是否重复,如果重复返回json数据{'code':1,'msg':'用户名重名'}否则返回:{'code':0,'msg':'用户名可用'};假定User模型已经存在(至少有一个属性是name)
正确答案:
def check_username(request): if request.is_ajax() and request.method == ‘POST’: if User.objects.filter(name=request.POST.get(‘name’)).exists():return JsonRespose({‘code’:1,‘msg’:‘用户已经存在’});return JsonRespose({‘code’:0,‘msg’:‘用户可用’})
解析:
要点:1.检验是否是ajax请求;2.查询数据库;3返回json数据