您的位置: 首页> 知识 > 正文

世界最资讯丨drf——登录功能、认证、权限、频率组件(Django转换器、配置文件作用)

2023-05-25 08:31:24 来源:博客园


(资料图)

Django转换器、配置文件作用
# django转换器 2.x以后 为了取代re_pathint path("books/")--->/books/1--->pk=1--->当参数传入视图类的方法中    str  path("books/")    path path("media/",serve,{"document_root":"路径"} ),    slug    uuid     # django配置文件1.Django项目要运行 优先执行配置文件的内容 做一下配置加载工作 manage.py中    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "drf_day07.settings")    ##Django项目配置文件的路径可以修改 配置文件名也可以修改 但一般不会去改    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "配置文件路径")        2.任何一个Django项目都有两套配置    一套是项目自己的 自己有哪个配置参数 优先用自己的    一套是内置的(Django内置的)        3.配置参数的作用    # 1  项目的根路径          BASE_DIR    # 2 密钥---》djagno中涉及到加密的,大部分都会用这个密钥        SECRET_KEY     # 3 是否开启调试模式 上线一定关闭 只要是调试模式,访问路径不存在时,会显示出所有能访问的路径,视图类出了异常,浏览器中能看到        DEBUG = True 默认是True    # 4 项目是要部署在某个服务器上 这个列表写部署服务器的ip地址 *表示任何地址都可以    ALLOWED_HOSTS = ["*"] 默认是空的    # 5 内置 我们自己写的app        INSTALLED_APPS = [            "django.contrib.admin",  # 后台管理---》很多表不是它的,是别的app的            "django.contrib.auth",  # auth 模块,UsrInfo表----》有6个表            "django.contrib.contenttypes",  # 有个django_content_type表是,这个app的            "django.contrib.sessions",  # session相关的            "django.contrib.messages",  # 消息框架            "django.contrib.staticfiles",  # 静态文件开启的app            "app01.apps.App01Config",  # app01 自己写的app要在这里注册            "rest_framework"  # drf 浏览器访问需要在这里注册        ]    # 6 中间件   MIDDLEWARE = [    "django.middleware.security.SecurityMiddleware",    "django.contrib.sessions.middleware.SessionMiddleware",  # session相关    "django.middleware.common.CommonMiddleware",  # 公共    "django.middleware.csrf.CsrfViewMiddleware",    "django.contrib.auth.middleware.AuthenticationMiddleware",    "django.contrib.messages.middleware.MessageMiddleware",    "django.middleware.clickjacking.XFrameOptionsMiddleware",]       # 7 根路由    ROOT_URLCONF = "drf_day07.urls"  # 默认是urls 也可以改文件名 一般不改    # 8 模板文件所在路径    TEMPLATES = [            ...        ]    # 9 项目上线,运行application,后面再说    WSGI_APPLICATION = "drf_day07.wsgi.application"    # 10 数据库配置    DATABASES = {            ...        }    # 11 做国际化    LANGUAGE_CODE = "zh-hans"  # 语言        TIME_ZONE = "Asia/Shanghai" # 时区        USE_I18N = True        USE_L10N = True        USE_TZ = True    # 12 静态文件STATIC_URL = "/static/"    # 13 表中,默认可以不写id,id主键自增,之前全是AutoField,长度很短    DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
登录功能表模型
class UserInfo(models.Model):    username = models.CharField(max_length=32)    password = models.CharField(max_length=64)class UserToken(models.Model):    token = models.CharField(max_length=64)    user = models.OneToOneField(to=UserInfo,on_delete=models.CASCADE)
视图类
class UserView(ViewSet):    @action(methods=["POST"],detail=False)    def login(self,request):        username = request.data.get("username")        password = request.data.get("password")        user_obj = UserInfo.objects.filter(username=username,password=password).first()        if user_obj:            # 登录成功            # 1 生成一个随机字符串 token            token = str(uuid.uuid4())            # 2 把token存到表中 UserToken表有值就更新 没有值就增加            UserToken.objects.update_or_create(user=user_obj,defaults={"token":token})            return Response({"code": 100, "msg": "登录成功", "token": token})        else:            return Response({"code": 101, "msg": "用户名或密码错误"})
路由
# 方式一:path("login/",views.UserView.as_view({"post":"login"})),# 路由如果这样写 是不需要使用action装饰器# 方式二:自动生成路由---》视图类中一定要用action装饰器from rest_framework.routers import SimpleRouterrouter = SimpleRouter()router.register("user",views.UserView,"user")urlpatterns = [    path("admin/", admin.site.urls),    # path("",include(router.urls))]# http://127.0.0.1:8000/user/login/urlpatterns += router.urls
认证组件
# APIView执行流程在视图类的方法之前 执行了三大认证# 认证:登录认证登录认证---》控制某个接口必须登录后才能访问    # 认证组件使用步骤(固定用法)1 写一个类 继承BaseAuthentication    from rest_framework.authentication import BaseAuthentication    2 在类中重写authenticate方法    class LoginAuth(BaseAuthentication):    def authenticate(self, request):  # 父类中有 一定要重写 否则报错        # 校验用户是否登录---》请求中携带我给的token 就是登录了        # token在哪携带 是接口规定的        # 1.规定待在请求地址中---》讲这个        # 2.规定带在请求头中(这个多)        # 3.规定待在请求体中        # 取出token META HTTP_TOKEN        """方法一 从请求地址中取"""        # token = request.query_params.get("token")        """方法二 从请求头中取"""        token = request.META.get("HTTP_TOKEN")        # 去数据库中 根据token 校验有没有数据        user_token = UserToken.objects.filter(token=token).first()        if user_token:            # 如果有就是已经登录            # print(request.user)  认证没有结束之前不能打印request.user 否则会递归            user = user_token.user            print(user_token.user)  # UserInfo object (1)            return user,token        else:            # 说明它带的token不对的            raise AuthenticationFailed("你没有登录,不能访问")    3 在方法中 完成登录认证 如果没有登录则抛异常    4 如果是登录的 返回登录用户和token        5 在视图类中 使用认证类(局部使用)class BookView(APIView):            authentication_classes = [LoginAuth,]    6 全局使用:    ### 重点:不要在配置文件中,导入莫名其妙的包    REST_FRAMEWORK = {        "DEFAULT_AUTHENTICATION_CLASSES": [            "app01.auth.LoginAuth"        ],    }    7 全局使用认证后 局部禁用    class UserView(ViewSet):        authentication_classes = []  # 列表置为空就可以    8 认证类的使用顺序    优先用视图类配置的        其次用项目配置文件        最后用drf默认的配置        # 小重点:一旦通过认证 在request中就有当前登录用户 request.user为当前登录用户def get(self,request):        print(request.user.username,"访问了接口")
权限组件
# 大家都登录了,但有的功能(接口),只有超级管理员能做,有的功能所有登录用户都能做----》这就涉及到权限的设计了# 权限设计:比较复杂---》有acl,rbac,abac。。。# 咱们现在只是为了先讲明白,drf的权限组件如何用,咱们先以最简单的为例查询所有图书:所有登录用户都能访问(普通用户和超级管理员)        没有权限控制    删除图书 只有超级管理员能访问    给其他用户设置的权限        # 权限类的使用步骤1.写一个类 继承BasePermission    from rest_framework.permissions import BasePermission    2.在类中写方法:has_permission      如果有权限 就返回True        如果没有权限 就返回False        错误信息是self.message="字符串"        class AdminPermission(BasePermission):    def has_permission(self, request, view):        # 如果有权限 就是返回True 没有权限 返回False        # 判断user_type是不是1 根据当前登录用户        # request.user # 就是当前登录用户 一旦来到这里,登录认证就通过了        if request.user.user_type == 1:            return True        else:            # 错误信息            self.message = "你好:%s,你没有权限" % request.user.username            return False            3.局部使用    class BookDetailView(APIView):        permission_classer = [AdminPermission,]    4.全局使用        REST_FRAMEWORK = {        "DEFAULT_PERMISSION_CLASSES": [            "app01.permission.AdminPermission"        ],        }    5.局部禁用    class BookView(APIView):        permission_classer = []
频率组件
# 限制访问频次比如某个接口 一分钟只能访问5次 超过了就得等    按ip地址 限制    按用户id 限制# 频率类的使用步骤1.写个类 继承:SimpleRateThrottle    2.重写某个方法:get_cache_key    可以返回ip或者用户id        返回什么就以什么做频率限制            3.写一个类属性 随意命名一个名字    scope = "lqz"    4.在配置文件中配置    "DEFAULT_THROTTLE_RATES": {        "lqz": "3/m" # 一分钟访问3次    },    5.全局用    "DEFAULT_THROTTLE_CLASSES": [                    ],    6.局部用    class BookView(APIView):        throttle_classes = [MyThrottle]

关键词:

资讯
业界
企业
骑闻
产品
唐山曹妃甸推动京津冀协同发展 产业协同转移全面提速
春暖渤海湾,书写新画卷。位于唐山曹妃甸的金隅天坛(唐山)木业科技有限公司的生产车间内一片繁忙景象——铺装、压机、翻板等工作正紧张有序
2022-03-19
石家庄海关共签发RCEP原产地证书864份 货值3.9亿元
自今年1月1日RCEP(《区域全面经济伙伴关系协定》)正式实施以来,截至3月14日,石家庄海关共签发RCEP原产地证书864份,货值3 9亿元。据介绍
2022-03-19
蚌埠海关累计签发RCEP原产地证书35份 涉及金额2583.09万元
在蚌埠海关报关大厅原产地证办理窗口,海关关员仔细核对着递交过来的材料。十分钟后,一份RCEP原产地证书打印盖章后交到了企业业务员手中。
2022-03-19
昆明西山区:“双招双引”推动人才链和产业链融合发展
为激励党员干部在营商环境建设中担当作为,昆明市西山区深入实施人才强区战略和人才领跑工程,建立健全招商引资和招才引资并轨新模式,以产
2022-03-19
绥化望奎以工业化思维为引领 推动肉类加工制造产业腾飞
望奎县以工业化思维为引领,推动全县以生猪为主的肉类加工制造产业一年全面开局、三年基本成势、五年产业腾飞,聚焦五化做强做优肉类加工制
2022-03-19
1-2月安徽省限上餐饮收入实现69.9亿元 同比增长17.4%
安徽省统计局近日发布信息,今年1-2月,全省限额以上消费品零售额1030 4亿元,同比增长10 4%,比2021年两年平均增速高0 9个百分点,比全国
2022-03-19
  中新网海口1月23日电(符宇群)海南省第六届人民代表大会第五次会议23日在海口举行第二次全体会议。海南省人民检察院检察长张毅在作报告
2022-01-24
  中新网太原1月23日电 (高雨晴 冉涌 张鹏宇)记者23日从国网山西省电力公司获悉,该公司冬奥保电应急发电队伍已到达河北张家口赛区,
2022-01-24
  中新网西宁1月23日电 (记者 李江宁)据青海省地震局23日消息,中国地震台网正式测定,北京时间2022年1月23日10时21分,在青海海西州德
2022-01-24
  中新网贵阳1月23日电 (周燕玲)对外开放,是内陆开放型经济试验区贵州正在召开的两会热点词汇,如何拓展海内外“朋友圈”助力贵州经济
2022-01-24
温馨生活好young 厦门推广文旅产品火爆全网
  中新网厦门1月23日电 (记者 杨伏山)“冬日暖阳厦门好young”福建省内宣传推广线下活动22日精彩收官。主办方称,本次活动火爆全网及福
2022-01-24
宁夏非遗传承人:刻刀里的守正创新更有“年味”
  (新春见闻)宁夏非遗传承人:刻刀里的守正创新更有“年味”  中新网银川1月23日电 题:宁夏非遗传承人:刻刀里的守正创新更有“年味
2022-01-24
沧州:8个重大科技专项项目确定 引领经济社会高质量发展
为充分发挥科技在经济社会高质量发展中的引领和支撑作用,沧州市确定8个项目为2021年全市重大科技专项项目。这8个重大科技专项项目分别为:
2022-03-19
  中新网海口1月23日电(王子谦 符宇群)海南省高级人民法院院长陈凤超23日说,2021年海南法院为自贸港建设提供坚强司法保障,全年有效管
2022-01-24
  新华社武汉1月23日电(记者王贤)随着春节假期临近,从广州、深圳等地返回湖北的旅客较多。为此,23日,武汉站、汉口站、襄阳东站、十堰
2022-01-24
  1月22日0—24时,广东省新增本土确诊病例3例和本土无症状感染者1例,均为珠海报告。23日,珠海市疫情防控新闻发布会上,珠海市政府副秘
2022-01-24
青海海西州德令哈市发生3.7级地震
  据中国地震台网正式测定,1月23日11时58分在青海海西州德令哈市发生3 7级地震,震源深度9千米,震中位于北纬38 40度,东经97 35度。
2022-01-24
  北京2022年冬奥会和冬残奥会颁奖花束已于近期完成交付。与传统的鲜切花不同,这些花束全部采用上海市非物质文化遗产“海派绒线编结技艺
2022-01-24
  中新网宿迁1月23日电 (刘林 张华东)核酸检测是当下及时发现潜在感染者、阻断疫情传播的有效方法。23日,记者从宿迁市宿豫区警方获悉
2022-01-24
  记者从天津市人社局获悉,从明天(24日)起,天津2022年度第一期积分落户申报工作正式开始,这是新修订的《天津市居住证管理办法》《天津
2022-01-24
  中新社北京1月23日电 (记者 刘亮)记者23日从中国海关总署获悉,2021年,中国海关组织开展“国门绿盾”专项行动,在寄递、旅客携带物
2022-01-24
  记者从天津市疫情防控指挥部获悉,天津疫情第341—360例阳性感染者基本信息公布。  目前,这20例阳性感染者已转运至市定点医院做进一
2022-01-24
“最美基层民警”武文斌:案子破了最管用
  中新网吕梁1月23日电 题:“最美基层民警”武文斌:案子破了最管用  作者 高瑞峰  同事称他为“拼命三郎”。从警14年,武文斌破
2022-01-24
  据“西安发布”消息,截至2022年1月23日,雁塔区长延堡街道近14天内无新增本地病例和聚集性疫情。根据国务院联防联控机制关于分区分级
2022-01-24
  中新网西宁1月23日电 (记者 孙睿)据青海省地震台网测定,2022年1月23日10点21分(北京时间)在青海省海西州德令哈市(北纬38 44度,东经
2022-01-24
江西南昌:市民赏年画迎新年 书法家挥毫送春联
  (新春见闻)江西南昌:市民赏年画迎新年 书法家挥毫送春联  1月23日,“赏年画过大年”新年画作品联展江西南昌站活动在江西省文化馆
2022-01-24
  中新网成都1月23日电 (祝欢)成都市第十七届人民代表大会第六次会议23日在成都举行,成都市中级人民法院院长郭彦与成都市人民检察院检
2022-01-24
列车临时停车3分钟救旅客
  (新春见闻)列车临时停车3分钟救旅客  中新网广州1月23日电 (郭军 黄伟伟)“车长,车长,4号车厢有位旅客腹涨难忍,身体不舒服”…
2022-01-24
女子背负命案潜逃24年 因涉疫人员核查落网
  中新网湖州1月23日电(施紫楠 徐盛煜 赵学良)1998年7月,犯罪嫌疑人杜某因家庭琐事,用菜刀将自己的弟媳砍伤致死。案发后,她从老家河
2022-01-24
广东“00后”雄狮少年锤炼功夫迎新春
  (新春见闻)广东“00后”雄狮少年锤炼功夫迎新春  中新社广州1月23日电 题:广东“00后”雄狮少年锤炼功夫迎新春  作者 孙秋霞 
2022-01-24
03-19 2022岳阳国际旅游节开幕 特色农产品展销等系列活动目不暇接
2022岳阳国际旅游节开幕 特色农产品展销等系列活动目不暇接
今天,天下洞庭岳阳市君山区第九届良心堡油菜花节暨2022岳阳国际旅游节开幕,菊红、粉红、水红、桃红、紫色、白色等七色组成的4万亩花海在 [详细]
03-19 2022年郴州计划重点推进文旅项目101个 总投资354亿元
2022年郴州计划重点推进文旅项目101个 总投资354亿元
3月16日,我市举行全市文旅项目和城市大提质大融城项目集中开工仪式,市委书记吴巨培宣布项目开工。郴州嘉合欢乐世界、仙福路工地清风徐来 [详细]
03-19 宿州泗县深入推进文旅融合发展 擦亮城市品牌
宿州泗县深入推进文旅融合发展 擦亮城市品牌
近年来,泗县以争创安徽省文化旅游名县为目标,深入推进文旅融合发展,努力擦亮水韵泗州 运河名城城市品牌,全县文化旅游业实现高质量发展 [详细]
03-19 淡季不忘引流 京郊民宿市场有望迎来回暖
淡季不忘引流 京郊民宿市场有望迎来回暖
旅游淡季中的京郊民宿有望成为市场中最先复苏的板块。3月17日,北京商报记者调查发现,虽然正值旅游淡季,且受疫情变化的影响,不过各家民 [详细]
01-24 西安浐灞回应“社区领导怒怼咨询群众”:涉事社区主任已停职
西安浐灞回应“社区领导怒怼咨询群众”:涉事社区主任已停职
  西安浐灞回应“一社区领导在市民咨询离市政策时发生争执”事件 涉事社区主任已停职  西部网讯(记者 刘望)日前,网络上流传一条视频 [详细]
01-24 陕西:截至23日12时 西安56.5万大中专学生已离校返家
陕西:截至23日12时 西安56.5万大中专学生已离校返家
  1月23日,陕西省举行第45场疫情防控工作发布会,发布会上陕西省教育厅相关负责人通报,陕西全省疫情有效控制后,大中专学校能不能放假 [详细]
01-24 河北魏县发布北京一阳性人员在魏县的主要轨迹
河北魏县发布北京一阳性人员在魏县的主要轨迹
  魏县疾病预防控制中心关于紧急寻找丰台区新冠肺炎阳性检测者同时间同空间人员的公告  2022年01月22日,接到邯郸市疾控中心转北京市疾 [详细]