django练习

这是一份关于Django框架的练习题目,涵盖了路由映射、模板、模型等多个方面。题目详细解释了Django中如视图函数、模板字段选项、模型属性命名、模板条件判断、HttpRequest属性等关键概念,帮助学习者深入理解Django的基础操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、单选题(共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数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值