网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事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>[A−Za−z0−94˘e00−9˘fa5]+@[a−zA−Z0−9_−]+([˙a−zA−Z0−9_−]+)+)/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 = {
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
WT配置
JWT_AUTH = {
[外链图片转存中…(img-Ew2ojb8P-1715629743870)]
[外链图片转存中…(img-C9GUxAJk-1715629743870)]
[外链图片转存中…(img-y8trLafl-1715629743870)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新