Django setting可以配置什么?
Setting配置信息
注册子应用
# 注意:需要修改Django的全局配置文`settings.py`
'''
1. 创建子应用
1)在pycharm中创建
python manage.py startapp 子应用名
2)在cmd命令中创建
django-admin startapp 子应用名
2. 在INSTALLED_APPS配置中写入
创建好的子应用名(app)
'''
INSTALLED_APPS = [
"app",
]
注册rest_framework
django-rest-framework
# 注意:需要修改Django的全局配置文`settings.py`
'''
1. 通过pip安装rest_framework
pip install djangorestframework
2. 将rest_framework写入INSTALLED_APPS中
'''
INSTALLED_APPS = [
"rest_framework",
]
设置cors headers跨域
django-cors-headers
# 注意:需要修改Django的全局配置文`settings.py`
'''
1. 通过pip进行安装
pip install django-cors-headers
2. 在INSTALLED_APPS配置中写入
corsheaders
3. 在MIDDLEWARE(中间件)配置中写入
corsheaders.middleware.CorsMiddleware
4. 在setting.py文件中写入
# 全局允许所有来源的跨域请求
CORS_ORIGIN_ALLOW_ALL = True
# 生产环境中推荐的做法
CORS_ORIGIN_ALLOW_ALL = False
# 使用CORS_ALLOWED_ORIGINS来指定允许访问的特定源
CORS_ALLOWED_ORIGINS = [
例:"http://example.com",
"https://another-example.com",
]
'''
INSTALLED_APPS = [
"corsheaders",
]
MIDDLEWARE = [
"corsheaders.middleware.CorsMiddleware",
]
分页
DRF全局分页
# 注意:需要修改Django的全局配置文`settings.py`
'''
1. 在settings中写入以下关键代码
'''
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
# 表示一页获取10条数据
'PAGE_SIZE': 10
}
DRF局部分页
# url地址:查询参数?page=页数%size=展示的数量数据
# hero/?page=2&size=2 查询第2页,每页2条的英雄信息
# 导包
from rest_framework.pagination import PageNumberPagination
# 只有某些视图,需要分页, 可以自定义分页类
class Pagination(PageNumberPagination):
page_size = 1 # 每页数量
max_page_size = 3 # 每页最大的数量
page_size_query_param = 'size' # 每页数量的参数名
page_query_param = 'page' # 页码的参数名
class HeroListCreateAPIView(ListAPIView):
queryset = Hero.objects.all() # 查询集
serializer_class = HeroModelSerializer # 自己定义的序列化器
# 没有指明分页类,会按照全局分页
pagination_class = Pagination # 使用自定义的分页类
过滤
全局过滤
# 注意:需要修改Django的全局配置文`settings.py`
# 通过pip安装插件
pip install django-filter
# 注册
INSTALLED_APPS = [
'django_filters',
]
# 配置过滤引擎 全局配置过滤
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
}
局部过滤
# 注册
INSTALLED_APPS = [
'django_filters',
]
# 针对单个视图类进行的过滤
# 导包
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.generics import ListAPIView
class GoodsListAPIView(ListAPIView):
...
filter_backends = (DjangoFilterBackend,)
指定字段过滤
# 注册
INSTALLED_APPS = [
'django_filters',
]
# 导包
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.generics import ListAPIView
class GoodsListAPIView(ListAPIView):
queryset = GoodsModel.objects.all()
serializer_class = GoodsModelSerializer
# filter_backends = (DjangoFilterBackend, ) # 如果全局设置过,局部不需要设置
# 指定该模型类中要过滤的字段
filterset_fields = ('price', 'name')
模糊过滤
自定义过滤器
# 注册
INSTALLED_APPS = [
'django_filters',
]
# 导包
from django_filters.rest_framework import DjangoFilterBackend,FilterSet from rest_framework.generics import ListAPIView
class # 写法与序列器基本一致
GoodsFilter(FilterSet):
'''过滤器'''
min_price = django_filters.NumberFilter(field_name="price",lookup_expr="gte")
# field_name 表示要过滤字段;lookup_expr 表示 过滤时要进行的操作,gte 表示 大于等于
max_price = django_filters.NumberFilter(field_name="price", lookup_expr="lte") # lte 小于等于 name = django_filters.CharFilter(field_name="name", lookup_expr="icontains") # icontains 表示 包含(忽略大小写) class Meta:
model = GoodsModel # 关联的表
fields = ["min_price", "max_price", "name"] # 过滤的字段 class GoodsListAPIView(ListAPIView):
'''视图类'''
queryset = GoodsModel.objects.all()
serializer_class = GoodsModelSerializer
filterset_class = GoodsFilter # 指明过滤器类
filter_backends = [DjangoFilterBackend,]
# FilterSet将自动为给定的字段创建一个类,并允许发出以下请求:
http://127.0.0.1:8000/api/goods/?max_price=50&name=瓜
搜索
全局搜索
该搜索引擎依赖于
rest_framework, 不需要安装额外的插件rest_framework的SearchFilter
# 注意:需要修改Django的全局配置文`settings.py`
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['rest_framework.filters.SearchFilter']
}
局部搜索
# 这将允许客户端通过执行以下查询来过滤列表中的项目
http://127.0.0.1:8000/api/goods/?search=西瓜汁
# 导包
from rest_framework.filters import SearchFilter
from rest_framework.generics import ListAPIView class GoodsListAPIView(ListAPIView):
# 视图类单独配置搜索
filter_backends = [SearchFilter]
# 配置搜索字段
search_fields = ['name'] # 您还可以使用查找API双下划线表示法在ForeignKey或ManyToManyField上执行相关查找:
search_fields = ['name', 'cate__name']
# 可以通过在字符前面添加各种字符来限制搜索行为
- `'^'`开始搜索
- `'='`完全匹配
- `'$'`正则表达式搜索
search_fields = ['^name', '=cate__name']
排序
全局排序
# 1.全局--settings.py
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ['rest_framework.filters.OrderingFilter']
}
局部排序
# 2. 局部设置 # 导包
from rest_framework import filters
class SomeModelViewSet(ModelViewSet):
# 在视图类中filter_backends配置排序
filter_backends = [filters.OrderingFilter]
# 排序的字段
ordering_fields = ['age','name']
# 通过连接GET参数手动指明排序字段
http://127.0.0.1:8000/user/?ordering=-age # 从大到小
http://127.0.0.1:8000/user/?ordering=age # 从小到大
认证
注意:认证需要和权限一起使用
认证失败会有两种可能的返回值 。401 Unauthorized 未认证 。403 Permission Denied 权限被禁止
全局认证
# 在配置文件中配置全局默认的认证方案 # 配置认证
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES':(
'rest_framework.authentication.BasicAuthentication',#基本认证 'rest_framework.authentication.SessionAuthentication', # session认证
),
)
局部认证
# 导包
from rest_framework.authentication import SessionAuthentication, BasicAuthentication from rest_framework.views import APIView class fxampleView(APIView):
"""视图类"""
# 每个视图中通过设置authentication_classess属性来设置局部认证
authentication_classes = (SessionAuthentication, BasicAuthentication)
权限
全局权限
# 在配置文件中设置默认的权限管理类
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
如果未在settings中配置权限
# 如果未指明,则采用如下默认配置(底层封装)
DEFAULT PERMISSION CLASSES : (
# 允许所有用户访问和操作
'rest _framework.permissions.ALLowAny'
)
局部权限
# 导包
from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView class Exampleview(APIView):
# 在具体的视图中通过permission_classes属性来设置权限
# IsAuthenticated通过认证的用户可以访问和操作
permission_classes = (IsAuthenticated,)
提供的权限
。AllowAny 允许所有用户 。IsAuthenticated 仅通过认证的用户 。IsAdminUser 仅管理员用户 。IsAuthenticatedOrReadOnly 认证的用户可以完全操作,否则只能get读取
限流
匿名用户全局限流
# 可以对接口访问的频次进行限制,以减轻服务器压力。特别是限制爬虫的抓取。
# 可以在配置文件中,使用DEFAULT_THROTTLE_CLASSES 和 DEFAULT_THROTTLE_RATES进行全局配置 REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': (
# 限制所有匿名未认证用户,使用IP区分用户
'rest_framework.throttling.AnonRateThrottle',
#认证用户的限流
'rest_framework.throttling.UserRateThrottle',
),
'DEFAULT_THROTTLE_RATES': {
# 可以使用 second, minute, hour 或day来指明周期
'anon': '3/minute',
'user': '5/minute'
}
}
匿名用户局部限流
# 视图中使用`throttle_classes`属性设置限流用户类型 # 导包
from rest_framework.generics import ListAPIView
from rest_framework.throttling import AnonRateThrottle from .serializer import UserSerializer, User class UserView(ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
throttle_classes = [AnonRateThrottle] # 指明针对匿名用户进行限流,限流频率全局配置 # 在项目配置文件中针对用户类型设置具体频率
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_RATES': {
# 可以使用 second, minute, hour 或day来指明周期
'anon': '3/minute',
'user': '5/minute'
}
}
跨域
# 注意:需要修改Django的全局配置文`settings.py`
# 需要安装django-cors-headers包,可以通过pip来安装:
pip install django-cors-headers
# 在INSTALLED_APPS中注册corsheaders
INSTALLED_APPS = [
"corsheaders",
]
# 在中间件中配置corsheaders.middleware.CorsMiddleware中间件
MIDDLEWARE = [
"corsheaders.middleware.CorsMiddleware",
]
# 在settings.py中编写允许任何请求
CORS_GRIGIN_ALLOW_ALL = True
# 或者指定允许的域名
# CORS_ORIGIN_WHITELIST = [
# 'http://localhost:3000', # 前端开发服务器地址
# 'https://yourfrontenddomain.com', # 生产环境前端域名
# ]
# 如果需要携带cookie,需要设置:
CORS_ALLOW_CREDENTIALS = True
# 允许的HTTP方法
CORS_ALLOW_METHODS = [
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
]
# 允许的请求头
CORS_ALLOW_HEADERS = [
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
# 添加任何自定义的header
]
Django setting可以配置什么?的更多相关文章
- $Django setting.py配置 ,GET、POST深入理解,三件套,orm对象关系映射简介
1 django中app的概念: 大学:----------------- 项目 信息学院 ----------app01 物理学院-----------app02 ****强调***:创建的每一 ...
- Django setting 常用配置
setting.py 这个文件包含了所有有关这个Django项目的配置信息,均大写: TEMPLATE_DIRS , DATABASE_NAME , 等. 最重要的设置是 RO ...
- Django Setting文件配置和简单的创建数据库字段
Django Settings文件配置 静态文件配置 STATIC_URL = '/static/' # 静态文件配置 STATICFILES_DIRS = [ os.path.join(BASE_D ...
- django中的setting最佳配置小结
Django settings详解 1.基础 DJANGO_SETTING_MODULE环境变量:让settings模块被包含到python可以找到的目录下,开发情况下不需要,我们通常会在当前文件夹运 ...
- Django的安装配置和开发
参考:<Django Web开发指南> Django的安装配置 1.https://www.djangoproject.com/download/下载Django-1.5.1.tar.gz ...
- Django 静态文件配置 (Nginx)
初学Django,在访问静态文件时候遇到很多误区,一直配置不成功,在此记录一下. Django静态文件访问分为两种:一种是Debug模式下,测试开发网站时对静态文件的访问,一种是实际生产环境中对静态文 ...
- Django day30 自定义配置settings文件,分页器,版本控制
一:自定义配置settings文件 1.有两套配置文件,默认配置,用户的配置 2.如果某个字段,用户配置了,就用用户的,如果没配置,就用默认的 二:分页器 1.三种分页: # 普通分页 from re ...
- Django + Apache + wsgi配置和环境搭建(ubuntu)
上一篇写了Django + nginx + uwsgi配置和环境搭建(ubuntu) 由于公司服务器环境问题,又配置了apache的环境.记录例如以下: 一. 安装环境: #apache sudo a ...
- Django项目基础配置和基本使用
博文配置内容包括: django项目的创建 django项目下应用的创建及配置 数据库的配置 templates模板的配置 命令行创建项目: 在需要的目录下创建Django项目输入命令:django- ...
- Ubuntu中部署Django项目的配置与链接MySQL
Django的简介 MVT模式的介绍创建项目的虚拟环境 本次使用的是pip安装 一.更新 sudo apt update 二.安装pip sudo apt install python3-pip 三. ...
随机推荐
- (系列十三)Vue3+Echarts搭建超好看的系统面板
说明 该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发). 该系统文章,我会尽量说的非常详细,做到不管新手.老手都能看懂. 说明:OverallAuth2 ...
- 打包jar 程序,同时将依赖报一起打包
1.概述 有些时候,我们打包一个java 程序,我需要将所有的依赖也一起打包,这样执行起来方便. 2.我们可以使用maven 插件实现 <build> <plugins> &l ...
- nginx的子路径重写替换
在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径:如果没有/,表示相对路径,把匹配的路径部分也给代理走. 假设下面四种情况分别用 http ...
- 2024-12-21:从魔法师身上吸取的最大能量。用go语言,在一个神秘的地牢里,有 n 名魔法师排成一列。每位魔法师都有一个能量属性,有的提供正能量,而有的则会消耗你的能量。 你被施加了一种诅咒,吸
2024-12-21:从魔法师身上吸取的最大能量.用go语言,在一个神秘的地牢里,有 n 名魔法师排成一列.每位魔法师都有一个能量属性,有的提供正能量,而有的则会消耗你的能量. 你被施加了一种诅咒,吸 ...
- macOS 终端可用的 Hex 查看与编辑器
在 Windows 下我们可以使用 WinHex,而在 macOS 平台上,有什么不错的十六进制查看器.编辑器呢? 准备首先,我们创建一个文件用于测试. echo 'welcome' > fil ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 — Vision Kit(2)
1.问题描述: 人脸活体检测返回上一页App由沉浸式变为非沉浸式多了上下安全区域. 解决方案: 检测结束后需要自己去设置沉浸式配置. 2.问题描述: Vision Kit文字识别是本地识别,还是上传至 ...
- Qt/C++原创项目作品精选(祖传原创/性能凶残/界面精美)
00 前言说明 从事Qt开发十年有余,一开始是做C#.NET开发的,因为项目需要,转行做嵌入式linux开发,在嵌入式linux上做可视化界面开发一般首选Qt,当然现在可选的方案很多比如安卓,但是十多 ...
- Qt音视频开发33-vlc和mpv打开后鼠标打圈圈问题的解决
一.前言 如果采用的vlc句柄模式,如果鼠标停留在句柄控件中会发现在打开后鼠标打圈圈,mpv句柄模式是在关闭后鼠标打圈圈,这两者真是一前一后,这种给人的体验其实很不友好的,播放开始后或者播放完成后鼠标 ...
- 即时通讯技术文集(第45期):微信、QQ技术精华合集(Part2) [共14篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第45 期. [-1-] QQ音乐团队分享:Android中的图片压缩技术详解(上篇) [链接 ...
- 即时通讯技术文集(第43期):直播技术合集(Part3) [共13篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第 43 期. [-1-] 直播系统聊天技术(一):百万在线的美拍直播弹幕系统的实时推送技术实践 ...