AttributeError: ‘str’ Object Has No Attribute ‘x’:字符串对象没有属性x的完美解决方法 大家好,我是默语,擅长全栈开发、运维和人工智能技术。...摘要 在Python编程中,AttributeError: ‘str’ object has no attribute 'x’通常出现在试图访问字符串对象中不存在的属性时。...当你试图访问一个对象的属性,但该对象并不具备这个属性时,就会抛出这个错误。...错误的成因 这个错误通常有以下几种成因: 2.1 访问不存在的属性 ❌ Python字符串对象没有名为x的属性。当你尝试访问一个字符串对象的不存在属性时,就会抛出这个错误。...解决方案 ✅ 为了解决AttributeError: 'str' object has no attribute 'x'错误,可以采取以下几种措施: 3.1 检查属性名称 首先,确保你访问的属性在目标对象中确实存在
Django&DRF重点内容大盘点 本文只是将学习过程中需要深刻记忆,在工作中常用的一些命令或者知识点进行一个罗列并阐释,不会全面的将所有内容进行讲解。...大家可以在了解了Django框架和DRF框架之后再来看这篇文章。否则会有点不知所云。...('age') return HttpResponse('OK') 1.6.4通过请求头传递数据(了解即可) 1.6.5request对象的属性 request请求对象的属性 说明 GET 查询字符串参数...查询对象->修改对象属性->对象.save() 2. 模型类.objects.filter(...).update(...)...多对象.外键属性 例:hero.hbook 2.
404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。...API key" } 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范 GET /collection:返回资源对象的列表(数组) GET /collection/resource:返回单个资源对象...db_table = 'zls_book' verbose_name = '书籍' verbose_name_plural = verbose_name def __str...使用 ---- 注册drf settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth',..._request就是原生request # 2) 原生request对象的属性和方法都可以被drf的request对象直接访问(兼容) # 3) drf请求的所有url拼接参数均被解析到query_params
Django REST framework 日志 默认的drf-api-logger没有保存用户并且没有获取日志的接口 本文通过重写drf-api-logger增加访问用户及获取日志的接口 并且增加定时器删除日志...is True """ class BaseModel(models.Model): id = models.BigAutoField(primary_key=True...) added_on = models.DateTimeField() def __str__(self): return str(self.id...def __str__(self): return self.api class Meta: db_table = 'drf_api_logs...import settings from django.urls import resolve from django.utils import timezone from drf_api_logger
settings for drf_test project....django.contrib.messages', 'django.contrib.staticfiles', 'drf_api', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware...', ] ROOT_URLCONF = 'drf_test.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates...import random from io import BytesIO from django.contrib import auth from drf_api.userinfo_form import...font = ImageFont.truetype('/static/Gabriola.ttf', 34) # 调用方法,返回一个画板对象 draw =
text=key-word 将 key-word 替换为需要搜索的关键字,例如将其替换为 markdown,测试集数据中得到的搜索结果如下: 搜索结果符合预期,但略微有一点不太好的地方,就是没有高亮的标题和摘要...但是,django-rest-framework 并没有提供这些比较个性化需求的序列化字段,因此接下来我们接触 drf 的一点高级用法——自定义序列化字段。...对象,这个对象就是视图中的 HTTP 请求对象,但是因为 django 中 request 对象无法像 flask 那样从全局获取,因此 drf 在视图中将其保存在了序列化器和序列化字段的 context...属性中以便在视图外访问;获取 request 对象的目的是希望获取查询的关键字,query_params 属性是一个类字典对象,用于记录来自 URL 的查询参数,例如我们之前测试查询功能时调用的 URL...summary 是我们新增的字段,注意我们序列化的对象是文章 Post,但这个对象是没有 summary 这个属性的,但是 summary 其实是对属性 body 序列化后的结果,因此我们通过指定序列化化字段的
vue是一款轻量级的mvvm框架,追随了面向对象思想,使得实际操作变得方便,但是如果使用不当,将会面临着到处踩坑的危险,写这篇文章的目的是我遇到的这个问题在网上查了半天也没有发现解决方案...vue对象相关属性,奇怪的是当我使用jquery获取该select的val()方法获取的是最新的数据,那么问题就来了:为什么元素的值发生了变动却没有更新到vue对象相关属性?...value); }; this.on('change', this.listener); 看到了吧,只有select的change事件才会触发select元素的value值更新到vue对象相关属性...内容而采用默认第一项,所以如果用户选择select的其他项后再切回第一项就可以触发该事件完成vue对象属性变更。...我这里给出我的解决方案:在使用js代码追加内容到从select后,使用更改从select对应的vue对象属性来实现默认选择第一项。
目录 DRF-认证权限频率 认证 登录接口 认证 权限 作用 使用 频率 作用 使用 认证权限频率+五个接口 模型 视图 序列化器 认证权限频率类 配置文件 路由 DRF-认证权限频率 前后端混合开发...,可以通过HttpResponse对象来设置cookie进而校验登录,现在前后端分离开发,用不到cookie,那么该怎么认证?...= uuid.uuid4() # print(type(uuid_str)) # token = str(uuid_str...scope,scope值自定义,配置文件中一致就行,重写get_cache_key方法,返回什么限制什么 在配置文件中配置,限制频率 局部/全局使用 认证权限频率+五个接口 模型 from django.db...= uuid.uuid4() # print(type(uuid_str)) # token = str(uuid_str
的session存到了django_session表中,不是很好操作,但是一般的场景都是没有啥问题的,现在生产中使用的一个叫做token机制的方式比较多,现在我们是不是就知道个csrf_token啊,其实...token有很多种写法,如何加密,你是hashlib啊还是base64啊还是hmac啊等,是不是加上过期时间啊,是不是要加上一个secret_key(客户端与服务端协商好的一个字符串,作为双方的认证依据...下面我们玩一下drf提供的认证组件的玩法。..._request,所以上面的取值方式是没有问题的,不过人家APIView不仅封装了老的request对象,并且还给你加了query_params属性,和老的request.GET得到的内容是一样的,所以可以直接按照下面的方式来写...,PageNumberPagination类中除了PAGE_SIZE属性之外,还有个page属性,这个page属性是第几页,用法是http://127.0.0.1:8000/books/?
目前在Python的Web框架中被应用最广泛的就是Django和Django REST Framework. 这两种框架都提供了非常健壮的功能,能满足Web开发的各个方面。...Django和Django REST framework(后简称DRF)提供了海量的全局配置、局部配置,来实现上述思想,但配置项太多了,有时人们往往不知道该如何利用。 一、用户鉴权 1....的传入参数相同,返回一个用户对象,然后将这个Backend添加到AUTHENTICATION_BACKENDS就可以了。...在Django+DRF中异常处理有两个重载点: 中间件中的process_exception函数 DRF的EXCEPTION_HANDLER配置 而其中EXCEPTION_HANDLER的作用时间早于中间件...,留了一个配置项供你改变默认行为,但却没有留出一个好的重载点。
5 django-guardian(1.1.1+) - 对象级权限支持。...小贴士: 在访问时,如果没有在xadmin后台退出账号,有可能会报错: Django rest framework __str__ returned non-string (type NoneType)...def __str__(self): 2 return self.username 三、drf实现商品列表页的功能 1.ModelSerializer(相当于django中的modelform...27 #将所有对象取出,而没有指定顺序,这就使得会出现:UnorderedObjectListWarning: Pagination may yield inconsistent results...的request和response request.data返回请求主体的解析内容,这与django本身的request.POST+request.FILES属性类似。
请求模块 请求模块大致的功能如下: 1.将wsgi的request对象转换成drf的request类的对象 2.封装后的request对象完全兼容wsgi的request对象,并且将原来request对象保存在新..._request = request #将父类的request存放在了自己的_request中,这样我们可以通过对象点属性的方法方法wsgi request的属性和方法也可以通过对象点_...) => 全局(settings文件的drf配置) => 默认(drf的默认配置) 响应模块 class Response(SimpleTemplateResponse): """ An...__getstate__() for key in ( 'accepted_renderer', 'renderer_context', 'resolver_match...配置中配置EXCEPTION_HANDLER,指向自定义的exception_handler函数 2.drf出现异常会回调exception_handler函数,携带异常对象和异常相关信息,在exception_handler
django-project\day2\django_drf>python manage.py startapp myapp 项目主路由配置: django_drf/urls.py 创建项目视图:...传入视图的request对象不再是Django默认的HttpRequest对象,而是基于HttpRequest类扩展后的Request类的对象。...增加serializer_class属性,直接指定使用的序列化器 增加过滤器属性:filter_backends 增加分页属性:pagination_class 增加lookup_field属性和实现get_object...\day2\django_drf>python manage.py makemigrations E:\workspace\django-project\day2\django_drf>python manage.py...DRF认证 目前DRF可任意访问,没有任何限制,是不符合生产环境标准的,因此接下来学习认证实现访问控制。
过滤器插件 django-filter重点使用方法 drf大总结 接口 DRF入门 序列化组件 三大认证 群查过滤组件 -曾老湿, 江湖人称曾老大。...db_table = 'api_car' verbose_name = '汽车表' verbose_name_plural = verbose_name def __str...过滤器插件 主要来做分类查询,上面所写的都是模糊查询,没有精确到分类。...处理异常,如果有响应结果,代表drf已处理,如果是None,自己处理 """ 序列化组件 # 1)可以将model对象序列化成可以返回给前台的json数据 # 2)可以校验前台传来的数据,完成model...类属性 ii)全局配置scope对应的访问频率:次数/时间 iii)get_cache_key返回的是与限制条件有关的动态字符串 - 限制条件来源于请求参数或请求头 iv)全局局部配置
DRF(Django RestFramework)是一套基于Django开发的、帮助我们更好的设计符合REST规范的Web应用的一个Django App,所以,本质上,它是一个Django App。...DRF APIView请求流程: ? DRF对django视图配置流程图(个人画) ?...2 解析器组件 (用来解析数据的请求的组件) Django并不能处理请求协议为application/json编码协议的数据 注意: DRF解析器会封装到View中的parsers内,在视图函数被调用时...,需要改为many=True 返回:将序列化对象的data属性返回即可 {{ 实践代码 }} --post接口设计 url定义:需要为post新增url,因为根据规范,url定位资源,http请求方式定义用户行为...= ''.join(str(uuid.uuid4()).split('-')) return random_str DRF认证组件的使用: 新建一个认证类,包含之后的认证逻辑: class
二、DRF实现商品列表页 Django Restful framework简称DRF,可以查看官方文档https://www.django-rest-framework.org/,从官方文档可以看到,Django...如果报错__str__ returned non-string (type NoneType),可以通过退出登录后台管理或者修改自定义的用户模型的__str__()方法解决,具体可参考https://blog.csdn.net...显然,序列化了所有字段,并且没有出错。...三、DRF的使用 1.DRF的Request和Response类 DRF对Django的Request和Response类进行了进一步的封装,因此使用起来更方便。...也可以根据需要从视图中返回常规HttpResponse或StreamingHttpResponse对象。
随后打开 Django 项目的 setttings.py 文件,将我们下载的 DRF 框架注册到 Django 的 APP 当中,如下: INSTALL_APPS = { ......views 代码进行改造了 # 三、Request 对象解析 当我们的视图层继承了 DRF 给我们提供的的 View 时,DRF会给我们编写的视图函数传递一个 request对象,该对象是对 Django...# 1、.data 属性 request.data 返回请求体解析后的内容。...这类似于标准的 request.POST 和 request.FILES 属性,但是该对象包含有独有的特性: 它包含了所有解析后的内容,包括文件类型和非文件类型的输入 它支持除了POST类型以外的其他HTTP...# 四、Respone 对象解析 DRF 中对 Django 原生的 Response 对象进行了封装
is not None: patch_vary_headers(response, cc_delim_re.split(vary_headers)) for key...response. """ # 后去渲染类(从这里再进入) renderers = self.get_renderers() # 得到的就是渲染类的对象...returns the list of renderers that this view can use. """ # self.renderer_classes,当前类对象没有该属性...import settings from django.test.signals import setting_changed from django.utils.module_loading import...视图类 => 自定义 drf 配置(全局) => drf 默认配置 自定义渲染模块 视图类 from rest_framework.renderers import TemplateHTMLRenderer
Request DRF把Django的HttpRequest扩展成了Request: ?...其中最核心的属性是request.data,它和request.POST的区别如下: request.POST # 只处理表单(Form)数据,只支持POST方法 request.data # 处理任何数据...,支持POST、PUT、PATCH方法 Response DRF的Response继承自Django的django.template.response.SimpleTemplateResponse: ?...它们提供了一些新功能,比如: 检查请求是Request对象 添加上下文到Response对象 返回请求错误如405 Method Not Allowed 当request.data格式有误时,抛出ParseError...东方说 最近测试开发和业务测试的话题频频出现在TesterHome论坛上,讨论激烈,我觉得从公司的角度来说,只会关注员工的产出有没有给公司带来价值,无论技术多厉害,不能创造价值终究是会优先被裁的。
= UpdatedAtKeyBit() data = key_bit.get_data() self.assertEqual(data, str(cache.get(key_bit.key...) cache.set(key_bit.key, now) self.assertEqual(key_bit.get_data(), now_str) 测试 HighlightedCharField...,序列化器中的任何序列化字段均可以通过直接访问 context 属性而间接访问到 _context 属性,从而拿到 request 对象。...主要包括 2 点: 构造 HTTP 请求对象 request。 设置 _context 属性的值。...# self.context["request"] 拿到请求对象 request setattr(field, "_context", {"request": drf_request
领取专属 10元无门槛券
手把手带您无忧上云