运行Django项目python manage.py runserver 0.0.0.0:8000打开浏览器登录访问:http://127.0.0.1:8000/api/books/get:查询列表post...:新增打开浏览器登录访问:http://127.0.0.1:8000/api/books/1get:查询单个对象put:修改delete:删除三、通用视图的高级用法动态查询集通过重写 get_queryset...() 方法,可以实现动态过滤查询集,例如只返回当前登录用户的数据:def get_queryset(self): # 只返回当前用户创建的数据 return Student.objects.filter...如果需要支持多字段查询,可以自定义 Mixin 类:from django.shortcuts import get_object_or_404class MultipleFieldLookupMixin...通常需要设置此属性或重写 get_queryset() 方法。注意直接访问 self.queryset 会导致结果缓存,应优先使用 get_queryset() 方法。
,这样当用户访问这个 URL 时,Django 就知道调用哪个视图函数去处理这个请求了。...在 Django 中 URL 模式的配置方式就是通过 url 函数将 URL 和视图函数绑定。..._404(Category, pk=self.kwargs.get('pk')) return super(CategoryView, self).get_queryset().filter...然后我们调用父类的 get_queryset 方法获得全部文章列表,紧接着就对返回的结果调用了 filter 方法来筛选该分类下的全部文章并返回。...你也许会被这么多方法搞乱,为了便于理解,你可以简单地把 get 方法看成是 detail 视图函数,至于其它的像 get_object、get_context_data 都是辅助方法,这些方法最终在 get
在 Django 中 URL 模式的配置方式就是通过 url 函数将 URL 和视图函数绑定。..._404(Category, pk=self.kwargs.get('pk')) return super(CategoryView, self).get_queryset().filter...然后我们调用父类的 get_queryset 方法获得全部文章列表,紧接着就对返回的结果调用了 filter 方法来筛选该分类下的全部文章并返回。...你也许会被这么多方法搞乱,为了便于理解,你可以简单地把 get 方法看成是 detail 视图函数,至于其它的像 get_object、get_context_data 都是辅助方法,这些方法最终在 get...配置好详情页视图之后,访问一下文章的详情,可以看到页面返回的结果和函数视图是一模一样的,至此,类视图就改造完毕。
GenericAPIView 是 Django REST Framework (DRF) 中的一个基础视图类,它继承自 APIView,并添加了一些常用的功能,特别是与数据库模型交互的功能。...减少重复代码 - 提供了常见操作的标准实现,如获取查询集、序列化数据等提高开发效率 - 内置了分页、过滤、排序等功能代码组织更清晰 - 将通用逻辑与业务逻辑分离易于扩展 - 可以通过重写方法来自定义行为与...核心详解请求数据的访问GenericAPIView 继承了 APIView 的所有功能,因此可以通过 request 对象访问请求数据:def post(self, request): # 访问请求体数据...与 Mixin 类的关系GenericAPIView 本身不提供 CRUD 操作的实现,但 DRF 提供了一系列 Mixin 类,可以与 GenericAPIView 组合使用:ListModelMixin...())通过合理使用这些功能,可以大大简化 API 开发工作,提高代码的可维护性和可读性。
我们可以很简单地在Django的model中定义JSONField: from django.db import models from django.contrib.postgres.fields import..."], "content": "..." } 我要查询作者是phit0n的所有文章,就可以使用Django的queryset: Collection.objects.filter(detail__author...同理,如果我想查询所有含有python这个tag的文章,可以这样编写queryset: Collection.objects.filter(detail__tags__contains='django'.../lookups/ Lookup Transform 我们以上面给出过的一个例子来说明这两者的区别: .filter(detail__tags__contains='django') 这个queryset...正常情况下,transform一般用来在通过外键连接两个表,比如.filter(author__username='phith0n')可以表示在author外键连接的用户表中,找到username字段;
DRF对django视图配置流程图(个人画) ?...model中的类型不一致,参数也可以调整),字段名称必须与model中的一致 在GET接口逻辑中,获取QuerySet 开始序列化:将QuerySet作业第一个参数传给序列化类,many默认为False...Django程序启动,开始初始化,获取配置信息,获取视图类并加载到内存中,获取url及视图类的对应关系 开始绑定视图类和url的对应关系,执行as_view()方法 as_view()方法被执行的时候传递了参数...),开始执行dispatch方法,注意self是视图类的实例化对象(每个请求都被封装为一个对象) dispatch开始执行get方法,注意此时的get方法会执行retrieve,以为已经被重定向了 开始执行...raise APIException("认证失败") 实现方式看上去非常简单,到token表里面查看token是否存在,然后根据这个信息,返回对应信息即可,然后,在需要认证通过才能访问的数据接口里面注册认证类即可
self.context访问视图类传递过来的内容 # 需求: # 1) 在视图类中,可以通过request得到登陆用户request.user # 2) 在序列化类中,要完成数据库数据的校验与入库操作...,可能会需要知道当前的登陆用户,但序列化类无法访问request # 3) 在视图类中实例化序列化对象时,将request对象传递进去 ---- 视图层 class Book(APIView):...再通过有名分组pk确定唯一操作对象 当然也可以自定义主键的有名分组名称lookup_field = 'id' 3.get_serializer():从类属性serializer_class中获得serializer...可以通过 response.data 拿到工具方法返回的Response类型对象的响应数据 工具视图 # 1)工具视图都是GenericAPIView的子类,且不同的子类继承了不听的工具类,重写了请求方法...# 2)工具视图的功能如果直接可以满足需求,只需要继承工具视图,提供queryset与serializer_class即可 视图集 # 1)视图集都是优先继承ViewSetMixin类,再继承一个视图类
本来今天不想发文的,昨天没发,怪不好意思的 django view URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应。...拿到对应数据库的模型对象 渲染到对于的html页面 在类中有三个重要的访问函数方法 get 就是当我访问当url是,就是执行get的方法 def get(self, request): return...Django ORM用到三个类:Manager、QuerySet、Model。...QuerySet实例 就是从数据库根据自己要求拿数据的 连数据都那不出来,写啥视图 所以在编写queryset必须用django shell 调试 在model中,Django通过给Model增加一个objects...如下查询: qs = new.objects.all() filter() filter是筛选的意思,通过filter筛选得到符合条件的数据集。
127.0.0.1:8000/myapp/api/user6/ #update, delete, retrieve DRF常用功能 主流认证方式 Session认证 HTTP是一个无状态的协议,每次访问都是新的...也就是必须每个人区分开,所以就有了用户名来标识,但每次访问页面都要登录,非常麻烦,这就有了会话保持。Cookie+Session就是实现会话保持的技术。...JWT 与普通Token一样,都是访问资源的令牌,区别是普通Token服务端验证token信息要查询数据库验证,JWT验证token信息不用查询数据库,只需要在服务端使用密钥效验。...与普通Token一样,都是访问资源的令牌,区别是普通Token服务端验证token信息要查询数据库验证,JWT验证token信息不用查询数据库,只需要在服务端使用密钥效验。...minute', 'user': '10/minute' } } 重启项目 apipost 请求1分钟内请求10次之后结果如下: 过滤 对于列表数据可能需要根据字段进行过滤,我们可以通过添加
使用场景: 重写 get_serializer_class和get_queryset,根据不同的操作返回不同的序列化器类和不同的查询集。...在执行视图的dispatch()方法前,会先进行视图访问权限的判断 在通过get_object()获取具体对象时,会进行对象访问权限的判断 DRF框架提供了四个权限控制类: AllowAny允许所有用户...pass 7.过滤 对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持。...pip install django-filter 在配置文件中增加过滤后端的设置: INSTALLED_APPS = [ ......',) } 在视图中添加filter_fields属性,指定可以过滤的字段 需求:写一个类视图,提供1个接口 1.获取所有的图书信息 GET/books/ class BookListView(ListAPIView
我们可以通过声明与Django forms非常相似的序列化器(serializers)来实现。...和put请求 class BookDetailViewSet(APIView): def get(self,request,pk): book_obj=Book.objects.filter...通过使用mixin类,我们使用更少的代码重写了这些视图,但我们还可以再进一步。...REST框架提供了一组已经混合好(mixed-in)的通用视图,我们可以使用它来简化我们的views.py模块。..._request.GET.get("token") token_obj=UserToken.objects.filter(token=token).first() if
payload = jwt_payload_handler(user) # 在视图类中,可以通过 序列化对象.object.get('user'或者'token') 拿到user...import jwt_encode_handler 校验token源码分析 ---- 源码入口 # 前提:访问一个配置了jwt认证规则的视图类,就需要提交认证字符串token,在认证类中完成token...过滤器插件使用,一下两个配置都可以,一般使用filter_class filter_class = CarFilterSet # filter_fields = []  django-filter...方法,设置scope类属性 ii)全局配置scope对应的访问频率:次数/时间 iii)get_cache_key返回的是与限制条件有关的动态字符串 - 限制条件来源于请求参数或请求头...过滤插件:filter_class = CarFilterSet 5、自定义过滤器:自定义过滤类实现filter_queryset即可,根据筛选条件筛选后再返回queryset即可 使用: i)视图类添加过滤类
', 'my_value', timeout=3600) # 获取缓存数据 cached_data = cache.get('my_key') 通过合理配置和使用缓存,开发者可以有效地提高Django...何时使用缓存: 当数据库查询或计算成本较高时,可以使用缓存来存储结果,避免重复计算。 当页面内容不经常变化、但需要频繁访问时,可以使用缓存来加速页面加载速度。...视图缓存(View Caching) 视图缓存是在视图函数或类视图中缓存整个页面或视图的输出。这可以通过Django的缓存框架来实现。...在Django中,通过优化QuerySet和ORM查询,可以显著提升数据库操作的效率。 1....例如: # 查看查询的执行计划 plan = MyModel.objects.filter(name='example').explain() print(plan) 通过以上策略,我们可以有效地优化Django
在视图函数中 from django.shortcuts import render return render(request,'模板文件名',字典数据) 视图层与模板层之间的交互 视图函数中可以将Python...数据库的增删改查可以通过管理器实现。...values(‘字段1’,’字段2’) 等价于select 列1,列2 from xxx 返回:QuerySet,但内部存字典,每一个字典代表一个数据 如: QuerySet [{'title...查询谓词 类属性 + ‘__’ + 谓词 定义:做更灵活的条件查询时需要使用查询谓词 说明:每一个查询谓词都是一个独立的查询功能 __exact:等值匹配 Author.objects.filter...IMAP VS POP3: 两者均为“拉取”协议,负责从邮件服务器中下载邮件 IMAP支持摘要浏览功能,并且是双向协议,客户端操作可以反馈给服务器 POP3必须下载全部邮件,且为单向协议,客户端操作无法同步服务器
: (1049, "Unknown database 'django_day03'")'''# 没有创建数据库 ---> 创建数据库 或者是检查自己 是否有当前数据库# 【4】除了可以使用 navicat...中操作Django的模型表 必须让 Django 处于运行的状态# 必须启动 Django 才能操作Django 的模型表# 操作Django的模型表必须在视图函数内# 【二】但是# 有别的方法# 为了测试数据的方便...【3】去Django框架里面# (1)中间件 --> 整个Django框架的保安 对请求进行校验# (2)urls.py 路由系统 ---> 对请求中的路径进行分发 ---> 找到对应的视图函数# (3...)view.py 视图系统 ---> 对请求中携带的数据或其他数据进行处理 ---> 返回一个 Django的响应对象 三板斧# (4)中间件 --> 整个Django框架的响应数据进行校验# 【4】wsgiref...路由# 在以前 url 语法中# 或者是 re_path 语法中# 【一】无名分组# 对路径中的某一个参数不进行命名# 向访问 第几页 下的数据# page/1/ 访问第一页# page/2/
,那么可以通过条件判断在get_serializer_class方法中通过返回不同的序列化器类名就可以让视图方法执行不同的序列化器对象了。...方法: get_queryset(self) :返回视图使用的查询集,主要用来提供给Mixin扩展类使用,是列表视图与详情视图获取数据的基础,默认返回queryset属性,可以重写 get_object...在试图中可以调用该方法获取详情信息的模型类对象。**若详情访问的模型类对象不存在,会返回404。...)处理流程的实现,如果需要编写的视图属于这五种,则视图可以通过继承相应的扩展类来复用代码,减少自己编写的代码量。 ...3.2 action 在视图集中,我们可以通过action对象属性来获取当前请求视图集时的action动作是哪个。除了默认的方法动作外,还可以添加自定义动作。
GenericAPIView 视图类 2. APIView 视图类 一、Generics:工具视图 generics 是工具视图,可以实现极简化接口编写操作。...工具视图都是 GenericAPIView 的子类,不同的子类继承不同工具类,重写请求方法。 ?...P.*)/$', views.BookListCreateView.as_view()), ] 工具视图的功能如果满足需求,只需要继承工具视图,添加 queryset,serializer_class...views.py class BookListCreateView(ListCreateAPIView): queryset = models.Book.objects.filter(is_delete...最主要的是,可以通过设置 请求-函数 映射关系,来将请求方式与原有方法或自定义方法对应执行。 查看源码 ?
method="post"> MTV--View(视图层) 请求对象 request request.GET 一个类似于字典的对象,包含 HTTP GET 的所有参数。...还可以在视图函数中建一个类的对象列表 然后引用这个列表 视图函数: def temp_func(request): class Person(object): def __init...如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。...会自动生成一套数据库抽象的API,可以让你执行关于表记录的增删改查的操作 技巧 通过logging可以查看翻译成的sql语句 在settings.py的最后添加如下内容 LOGGING = {...) filter(kwargs): 它包含了与所给筛选条件相匹配的对象 Returns a new QuerySet 后面加.first()才是对象** filter() QuerySet
通过GET/ POST/ PUT/ DELETE来获取/新建/更新/删除资源。一般使用JSON格式返回数据。大多数web框架都有相应的插件支持RESTful API。...两者都是数据转换格式,比如我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,所以需要把数据进行序列化,变成字符串或者json数据,提供给别人,这是序列化。...pip install django-filter # Filtering支持。...用于编写字符串路由 # django.urls.re_path 用于编写正则路由 测试API,命令行启动服务器 python manage.py runserver 可以从命令行访问我们的API,使用诸如...Api List中可以查看所有学生信息,也可以进行增删查改(POST/DELETE/GET/PUT) 也可以通过携带用户id的url访问单个用户 http://127.0.0.1:8000/students