2024年最全Django常见面试题总结(二)_django modelviewset 字段可以为空,2024大厂大数据开发高级面试题及答案

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!


### 获取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 表单中,通常会发生一个键有多个值的情况,例如 (多选框)就是一个很常见情况。****


![在这里插入图片描述](https://img-blog.csdnimg.cn/0eaad0a503e048f9817fdd6688cf5fd4.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2fefbabbfa254320b778f3c201fb0766.png)


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


**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\w{6,20})/count/ ′ , v i e w s . U s e r n a m e I s E x i s t e d V i e w . a s v i e w ( ) ) , r e p a t h ( r ′ ( ? P < e m a i l > [ A − Z a − z 0 − 9 4 ˘ e 00 − 9 ˘ f a 5 ] + @ [ a − z A − Z 0 − 9 _ − ] + ( [ ˙ a − z A − Z 0 − 9 _ − ] + ) + ) / c o u n t / ', 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.UsernameIsExistedView.asview()),repath(r(?P<email>[AZaz094˘e009˘fa5]+@[azAZ09_]+([˙azAZ09_]+)+)/count/',
views.EmailIsExistedView.as_view()),
path(‘login/’, obtain_jwt_token),
]


#### 测试


![在这里插入图片描述](https://img-blog.csdnimg.cn/9bc61622337e4eb5a3c6613ff012ef23.png)


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


#### a、在项目公共文件utils中,新建handle\_jwt\_response.py文件


![在这里插入图片描述](https://img-blog.csdnimg.cn/7415ae9ed4f04800997f9cfbf740eddf.png)



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 = {

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

WT配置
JWT_AUTH = {

[外链图片转存中…(img-Ew2ojb8P-1715629743870)]
[外链图片转存中…(img-C9GUxAJk-1715629743870)]
[外链图片转存中…(img-y8trLafl-1715629743870)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值