Django常见面试题总结(二)

article/2024/12/29 9:52:23

在这里插入图片描述

接上篇文章:https://blog.csdn.net/YZL40514131/article/details/125813096?spm=1001.2014.3001.5501

二十一、selected_related与prefetch_related有什么区别?(重要)

在Django中,所有的Queryset都是惰性的,意思是当创建一个查询集的时候,并没有跟数据库发生任何交互。因此我们可以对查询集进行级联的filter等操作,只有在访问Queryset的内容的时候,Django才会真正进行数据库的访问。而多频率、复杂的数据库查询往往是性能问题最大的根源。
不过我们实际开发中,往往需要访问到外键对象的其他属性。如果按照默认的查询方式去遍历取值,那么会造成多次的数据库查询,效率可想而知。

在查询对象集合的时候,把指定的外键对象也一并完整查询加载,避免后续的重复查询。
1,select_related适用于外键和多对一的关系查询;
2,prefetch_related适用于一对多或者多对多的查询。

二十二、什么是Cookie、如何获取、设置Cookie

会话跟踪技术,保留用户
Cookie是由服务器创建,然后通过响应发送给客户端?的一个键值对。
具体一个浏览器针对一个服务器存储的key-value({ })

设置Cookie

response.set_cookie("is_login",True)

获取

request.COOKIES.get("is_login")

二十三、什么是session,与cookie的对比、设置、获取、清空session

Session是服务器端技术,利用这个技术,服务器在运行时可以 为每一个用户的浏览器创建一个其独享的session对象,由于 session为用户浏览器独享,所以用户在访问服务器的web资源时 ,可以把各自的数据放在各自的session中,当用户再去访问该服务器中的其它web资源时,其它web资源再从用户各自的session中 取出数据为用户服务。

设置session

request.session['username']="kobe"
request.session.set_expiry(7*24*3600)		# 设置session过期时间为一周后

获取session

username=request.session.get('age','')

删除session

request.session.flush()

二十四、简述什么是FBV和CBV

FBV(function base views)就是在视图函面使用函数处理请求
CBV(class base views)就是在视图里面使用类处理请求

二十五、命令migrate 和makemigrations的差别

生成迁移文件

python manage.py makemigration 子应用名

执行迁移

python manage.py migrate

二十六、视图函数中,接收的请求对象常用方法和属性有哪些

request.get:查询字符串参数
request.post:form表单参数
request.body:非表单数据
request.FILES:⼀个类似于字典的对象,包含所有的上传⽂件
request.user:请求用户
request.path:请求url
request.method:请求方式

二十七、Django的Model的继承有几种形式,分别是什么

重点:描述抽象模型类

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

serializer.is_valid()

二十九、查询集的两大特性?什么是惰性执行(重要)

惰性执行、缓存 。 
使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数
新建一个查询集对象就可以实现

三十、查询集返回的列表过滤器有哪些

all()
filter()
exclude()
order_by()

三十一、在Django中,服务端给客户端响应信息有几种方式?分别是什么?

HttpResponse,
JsonResponse,
redirect

三十二、QueryDict和dict区别

在HttpRequest对象中, GET和POST属性是django.http.QueryDict类的实例。
QueryDict类似字典的自定义类,用来处理单键对应多值的情况。
在 python 原始的字典中,当一个键出现多个值的时候会发生冲突,只保留最后一个值。而在 HTML 表单中,通常会发生一个键有多个值的情况,例如 (多选框)就是一个很常见情况。

在这里插入图片描述
在这里插入图片描述

三十三、如何给一个字段设置一个主键

primary_key

三十四、解释blank和null

blank

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

null

设置为True时,django用Null来存储空值。日期型、时间型和数字型字段不接受空字符串。所以设置IntegerField,DateTimeField型字段可以为空时,需要将blank,null均设为True。

三十五、如何在django urlpatterns注册路由

router=routers.SimpleRouter()
router.register('project',视图类)urlpatterns=[path('',include(router.urls))]

三十六、Django中如何加载初始化数据

Django在创建对象时在掉用save()方法后,ORM框架会把对象的属性转换为写入到数据库中,实现对数据库的初始化;通过操作对象,查询数据库,将查询集返回给视图函数,通过模板语言展现在前端页面

三十七、创建Django工程、Django app、以及运行的命令

django-admin startproject django_project	创建一个项目
python manage.py runserver					运行项目
python manage.py startapp 子应用名			创建子应用
python manage.py makemigrations 子应用名		创建迁移脚本
python manage.py migrate					生成迁移脚本
python manage,py createsuperuser			创建管理员用户
python manage.py shell						终端调试代码

三十八、简述 django rest framework框架的认证流程。(非常重要)

1 创建子应用

python manage.py startapp users

2 注册子应用

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','corsheaders',  # 同源策略'rest_framework','drf_yasg',  # 生成接口文档子应用'django_filters',  # DRF过滤器子应用'users',
]

3 采用JWT TOKEN认证

a 下载django-restframework-jwt

pip install djangorestframework-jwt

b settings.py文件中指定使用jwt TOKEN认证类

REST_FRAMEWORK = {# 指定搜索引擎类'DEFAULT_FILTER_BACKENDS': ['rest_framework.filters.SearchFilter','rest_framework.filters.OrderingFilter', ],# 'DEFAULT_FILTER_BACKENDS':['django_filters.rest_framework.DjangoFilterBackend'],# 'SEARCH_PARAM': 'se',# 指定分页引擎类'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination','PAGE_SIZE': 3,# 指定用于支持coreapi的Schema'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',# 指定使用的认证类# a、在全局指定默认的认证类(认证方式)'DEFAULT_AUTHENTICATION_CLASSES': [# 1、指定jwt token认证'rest_framework_jwt.authentication.JSONWebTokenAuthentication','rest_framework.authentication.SessionAuthentication','rest_framework.authentication.BasicAuthentication',],
}

4 配置路由,可以进行用户名和密码进行认证

全局路由

urlpatterns = [path('admin/', admin.site.urls),re_path('',include('projects.urls')),path('docs/',include_docs_urls(title='接口测试平台API文档',description='这个是接口平台的文档')),re_path(r'^swagger(?P<format>\.json|\.yaml)$', schema_view.without_ui(cache_timeout=0), name='schema-json'),  # <-- 这里path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),  # <-- 这里path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),  # <-- 这里path('user/',include('users.urls'))
]

子路由:

urlpatterns=[path('',include(router.urls)),re_path(r'^(?P<username>\w{6,20})/count/$', views.UsernameIsExistedView.as_view()),re_path(r'^(?P<email>[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+)/count/$',views.EmailIsExistedView.as_view()),path('login/', obtain_jwt_token),
]

测试

在这里插入图片描述

5 重写生成token的方法:将用户名和用户id一同输出

a、在项目公共文件utils中,新建handle_jwt_response.py文件

在这里插入图片描述

def jwt_response_payload_handler(token,user=None,response=None):return {'user_id':user.id,'username':user.username,'token':token}

b、还得在settings.py文件中指定token失效时间和指定访问路径,目的是:让项目运行时找到自己重写的方法;

# JWT配置
JWT_AUTH = {# 指定token失效时间为1天'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),# 使用自己的jwt_response_payload_handler,目的是响应结果中可以返回用户名和id'JWT_RESPONSE_PAYLOAD_HANDLER': 'utils.handle_jwt_response.jwt_response_payload_handler',}

测试

在这里插入图片描述

三十九、django rest framework如何实现的用户访问频率控制?(非常重要)

1 settings.py文件中全局配置,所有继承APIView的类视图都会生效

REST_FRAMEWORK = {.........'DEFAULT_THROTTLE_CLASSES': ['rest_framework.throttling.AnonRateThrottle','rest_framework.throttling.UserRateThrottle'],'DEFAULT_THROTTLE_RATES': {'anon': '100/day',  # 匿名用户'user': '10/day'}
}

2 局部配置(在指定的继承APIVIew的类视图中加入throttle_classes = [CustomAnonRateThrottle],该类视图具备限流功能)

公共文件中新建throttle_class.py文件

utils----->throttle_class.py,定义CustomAnonRateThrottle(随意),但是必须继承UserRateThrottle
UserRateThrottle:表示正对登录用户的

from rest_framework.throttling import UserRateThrottleclass CustomAnonRateThrottle(UserRateThrottle):THROTTLE_RATES = {"user": "5/day"}
from utils.throttle_class import CustomAnonRateThrottleclass ProjectsViewSet(viewsets.ModelViewSet):queryset=Projects.objects.all()serializer_class = ProjectsSerializerpagination_class = PageNumberPaginationpermission_classes = [permissions.IsAuthenticated]throttle_classes = [CustomAnonRateThrottle]def list(self, request, *args, **kwargs):response=super().list(request, *args, **kwargs)for item in response.data['results']:item['interfaces']=Interfaces.objects.filter(project_id__exact=item['id']).count()item['testsuits']=Testsuits.objects.filter(project_id__exact=item['id']).count()item['testcases']=Testcases.objects.filter(interface__project_id__exact=item['id']).count()item['configures']=Configures.objects.filter(interface__project_id__exact=item['id']).count()return response

3 测试:

在这里插入图片描述

四十、values()与values_list()有什么区别?

values : 取字典的queryset
values_list : 取元组的queryset

在这里插入图片描述


http://chatgpt.dhexx.cn/article/37fTCDEc.shtml

相关文章

【django】django面试题总结

一、django中间件的使用 Django在中间件中预置了六个方法&#xff0c;这六个方法的区别在于不同的阶段执行&#xff0c;对输入或输出进行干预&#xff0c;方法如下&#xff1a; 1.初始化&#xff1a;无需任何参数&#xff0c;服务器响应第一个请求的时候调用一次&#xff0c;…

python—Django面试题汇总

django面试题 1. Django架构&#xff1a;MVT&#xff1a; Django遵循MVC设计&#xff0c;并有一个专有的名词&#xff1a;MVT 1.M全拼为Model,与MVC的M功能相同&#xff0c;负责数据处理&#xff0c;内嵌了ORM框架。 2.V全拼为View,与MVC中的C功能相同&#xff0c;接收HttpRe…

超详细的Django面试题

Hello&#xff0c;我是 Alex 007&#xff0c;为啥是007呢&#xff1f;因为叫 Alex 的人太多了&#xff0c;再加上每天007的生活&#xff0c;Alex 007就诞生了。 框架层 01.什么是Django框架&#xff1f;&#xff08;初级&#xff09; Django是一个开放源代码的Web应用框架&am…

django面试题总结

列举HTTP中常见的请求方式 HTTP请求的方法&#xff1a; HTTP/1.1协议中共定义了八种方法&#xff08;有时也叫“动作”&#xff09;&#xff0c;来表明Request-URL指定的资源不同的操作方式 注意&#xff1a; 1&#xff09;方法名称是区分大小写的&#xff0c;当某个请求所…

Django 面试题

过完年后&#xff0c;就是春招了&#xff0c;是找工作的好时机&#xff0c;找工作或换工作的同学需要好好准备一下面试了&#xff0c;最近我精选了 10 个关于 Django 的面试题&#xff0c;如果要看更多面试题目&#xff0c;请在公众号后台回复「面试」获取。祝你新的一年&#…

Django常见面试题总结(一)

一、ORM是什么&#xff1f;优势&#xff1f; ORM&#xff1a;中文翻译为对象关系映射。 模型类名对应数据库表名 类属性对象数据库表字典 类属性中的字段对应数据库中的约束条件 模型类的多个实例对应于实例 优势&#xff1a; orm的技术特点&#xff0c;提高了开发效率&#xf…

Django面试题

目录 1 列举Http请求中常见的请求方式 2 谈谈你对HTTP协议的认识 3 简述MVC模式和MVT模式 4 简述Django请求生命周期 5 简述什么是FBV和CBV 6 谈一谈你对ORM的理解 7 rest_framework 认证组件的流程 8 什么是中间件并简述其作用 9 django 中间件生命周期 10 django中…

2020年最新Django经典面试问题与答案汇总(上)-大江狗整理

周末抽空整理了下Django经典面试问题及答案&#xff0c;希望对小伙伴们学习和工作有所帮助。如果小编我是负责招聘Python Web或Django开发人员的面试官&#xff0c;我也会考虑问如下问题。从下面可以大致了解一个面试者对Django技术的了解程度。由于篇幅所限&#xff0c;本文将…

用HTML5制作的3D相册

HTML5 非常强大&#xff0c;尤其是和CSS3结合&#xff0c;有时候能达到非同凡响的网页动画效果。今天要分享的这款HTML5应用就是一款很酷的3D立体图片相册应用&#xff0c;它可以用鼠标多拽从多个角度浏览相册图片&#xff0c;点击图片&#xff0c;就可以放大图片&#xff0c;…

HTML5制作信息登记表

# 制作信息登记表#样式需求分析: 一、 通过最外层的大盒子对页面进行整体控制&#xff0c;设置宽高、背景图片及相对定位。 二、 通过标记对表单进行整体控制&#xff0c;对其设置宽高、边距、边框样式及绝对定位。 三、 通过 标记控制标题的文本样式&#xff0c;对其设置…

HTML5制作二级菜单(主菜单的子菜单)

HTML5制作二级菜单&#xff08;主菜单的子菜单&#xff09; 一、HTML文件代码二、 CSS文件代码三、效果图 一、HTML文件代码 <!--submenu.html--> <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><link r…

制作HTML5海报

一、HTML5海报有什么卵用&#xff1f; HTML5海报作用跟一般的海报差不多&#xff0c;但是拥有更生动的灵活的页面和便捷快速的传播途径&#xff08;网络&#xff09;。不仅可以在微信公众号中推广&#xff0c;也可以在票圈&#xff0c;空间&#xff0c;群上推广。做得好的海报&…

用html5和css制作信息登记表

<!doctype html> <html><head><meta charset"utf-8"><title>信息登记表</title><!-- <link rel"stylesheet" href"style07.css" type"text/css"> --><style type"text/css&q…

html5制作购物车页面,利用html来制作一个简单美观的购物车界面

首先来展示一下购物车界面: (学习视频分享:html视频教程) 这个页面只是实现了其布局视图,没有使用js或者jquery相关语言,在博主看来是比较利于我们将其加入到自己的程序中的以下是相关代码: index.html 商品名称单价数量操作旁氏洗发露991删除旁氏洗发露991<

html5制作圆形

代码如下 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Document</title> <style type"text/css"> .addBg { width: 100px; height: 100px; background-color…

html页面转盘如何实现,html5制作转盘的详解及实例

今天给大家带来的案列是html5转盘实例,可以直接拿来做抽奖程序,有需要的朋友可以拿去使用,下面是案列代码。html5制作转盘游戏 h1{width: 100%; height: 3rem; line-height: 3rem; font-size: 1.8rem; color:#c60; text-align: center; font-weight: bolder; } KinerLotter—…

用html做网页作品,HTML5实例:用HTML5制作的网页的15个优秀案例

在这里分享给大家精心挑选的15个HTML5网站模板&#xff0c;这些模板涉及商业、投资、简历、画廊、艺术、慈善、房地产&#xff0c;以及食品等等方面。 1. Zeni – Responsive HTML5 Portfolio Template Demo Download 2. Torn – HTML5 Template 5 Skins Demo Download 3. Fold…

用HTML5制作一个简易计算器

用H5制作一个简易计算器 最近刚学JavaScript&#xff0c;之后紧接着做了一个简易的计算器&#xff0c;能够实现数字的加减乘除运算。 首先&#xff0c;先用HTML5搭建好计算器大体框架。我这里用了两个表格&#xff0c;一个充当显示器&#xff0c;另一个表格就做成计算器按键部…

如何用html做一个贪吃蛇,如何用HTML5制作贪吃蛇游戏

如何用HTML5制作贪吃蛇游戏 发布时间:2020-07-09 15:09:59 来源:亿速云 阅读:122 作者:Leah 如何用HTML5制作贪吃蛇游戏?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 本文介绍了H5 c…

用HTML5制作精美战机游戏

每天要被大学老师催H5作业&#x1f44f;&#x1f3fb;&#x1f44f;&#x1f3fb;&#x1f44f;&#x1f3fb; 不如看看本文&#xff0c;代码齐全&#xff0c;直接用来做参考案例&#x1f44c;&#x1f3fb; 干货满满不看后悔&#x1f44d;&#x1f44d;&#x1f44d; 代码…