Django常见面试题总结(二)_django modelviewset 字段可以为空(4)

img
img

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

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

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

设置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
    }



![img](https://img-blog.csdnimg.cn/img_convert/b5cc4870592ead4acdf8d22b74c39225.png)
![img](https://img-blog.csdnimg.cn/img_convert/0845e25af8d52c96fec638f510fc1f23.png)

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

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


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


        'token':token
    }



[外链图片转存中...(img-2hpt13Zx-1714961586046)]
[外链图片转存中...(img-Oz4R6rYs-1714961586046)]

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

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


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

  • 30
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值