django中视图本质上就是个函数,接受用户传入的请求,返回对应的响应。 在视图中处理业务逻辑。django约定将视图放在views.py的文件中。这个文件应放在项目或者应用目录中。...函数视图 基于函数的视图 def some_view(request): dosometing return HttpResponse(html) 特点: 逻辑清晰好理解 复用性较差 类视图...基于类的视图,换了一种写法,不能替代函数视图,有一些优势: 用特定的方法去管理http方法(get post) 使用面向对象的技术,可以将代码分解成可重用的组件 所以后续大部分会采用类视图的方式编写代码...class UserRegisterView(generics.CreateAPIView): serializer_class = UserRegisterSerializer 只需要两行就完成了注册类视图的编写...看一下CreateAPIView类具体干了什么,可以点击进行跳转 class CreateAPIView(mixins.CreateModelMixin, GenericAPIView
虽然这篇文章的标题,看起来是有点找抽——既然一个类是空的,那不就是说里面啥也没有嘛?...比如这样: class empty { }; 上面定义了一个真的很空的空类,一对大括号里面除了空气之外,真的什么都没有!...但,凡事皆有例外,以上那些不请自来的函数们,是不是任何时候都会出现呢?可不一定。...因为引用一旦指定了关联的目标就再也不能修改。那么, x1 = x2 会让 x1.name指向的s1的值变为"bb"吗?...这么一来,那其他跟x1无关的但使用了字符串s1的对象岂不是要平白无故地遭受牵连? 以上分析,针对类的非静态const型成员age而言,是一模一样的,因为age也不应该通过类对象的赋值操作而发生改变。
Django小技巧15: 使用基于类视图的Mixins Posted November 05, 2018 ?...翻译整理自: simpleisbetterthancomplex.com 今天讲述三点关于 Mixins 使用的一些规范: Django 提供的View 保持在继承的最右边....Mixins 在基本视图的左侧 Mixins 应该继承Python的内置对象类型(object)....依类似的方式, 你可以在UpdateView中, 重用相同的FormMessageMixin, 并覆盖默认的form_invalid_message方法....Django 1.9开始, 内置的LoginRequiredMixin和UserPassesTestMixin.
在Django中对于基于函数的视图我们可以 @csrf_exempt 注解来标识一个视图可以被跨域访问。那么对于基于类的视图,我们应该怎么办呢?...简单来说可以有两种访问来解决 方法一:在类的 dispatch 方法上使用 @csrf_exempt from django.views.decorators.csrf import csrf_exempt...args, **kwargs): return super(MyView, self).dispatch(*args, **kwargs) 方法二:在 urls.py 中配置 from django.conf.urls...import url from django.views.decorators.csrf import csrf_exempt import views urlpatterns = [ url
基于类的视图 视图是一个可调用对象,它接收一个请求然后返回一个响应。这个可调用对象可以不只是函数,Django 提供一些可以用作视图的类。它们允许你结构化你的视图并且利用继承和混合重用代码。...基于类的视图简介 内建的基于类的通用视图 使用基于类的视图处理表单 使用混合来扩展视图类 基本的示例 Django 提供基本的视图类,它们适用于广泛的应用。...如果你只是修改基于类的视图的一些简单属性,你可以将它们直接传递给as_view()方法调用: from django.conf.urls import url from django.views.generic...TemplateView是一个类不是一个函数,所以我们将URL 指向类的as_view()方法,它让基于类的视图提供一个类似函数的入口: # urls.py from django.conf.urls...但如果客户端发出一个HEAD请求,响应将具有一个空的响应体而Last-Modified头部会指示最新发布的书籍的时间。基于这个信息,客户端可以下载或不下载完整的对象列表。
DRF视图可以是函数视图或基于类的视图。函数视图类似于Django中的函数视图,它接收一个request对象并返回一个响应。...基于类的视图是DRF中的主要视图类型,它继承自DRF提供的基类,并提供了一些常见的功能,例如身份验证,权限控制和序列化器的使用。...以下是一个简单的基于类的视图示例:from rest_framework import genericsfrom .serializers import BookSerializerfrom .models...BookSerializer def perform_create(self, serializer): serializer.save()在上面的代码中,我们定义了一个名为BookList的基于类的视图...CreateAPIView:提供一个创建视图,用于创建新的对象。UpdateAPIView:提供一个更新视图,用于更新现有对象。DestroyAPIView:提供一个删除视图,用于删除一个对象。
前言 django中编辑视图views.py有两种方式,一种是基于类的实现,另外一种是函数式的实现方式,两种方法都可以用。...REST框架提供了一个APIView类,它是Django View类的子类。...View与APIView的区别 View是Django默认的视图基类,APIView是REST framework提供的所有视图的基类, 继承自Django的View。...APIView与View的不同之处在于: 传入到视图方法中的是REST framework的Request对象,而不是Django的HttpRequeset对象; 视图方法可以返回REST framework...REST framework的APIView REST framework的APIView继承了django的View类,先序列化Card类,这里的序列化用rest_framework里面的ModelSerializer
再次优化 查看 rest_framework.generics.CreateAPIView rest_framework.generics.ListAPIView 可以看到很多重复的代码 ?...,不能合并 有相同的get方法 两个类视图所对应的url地址不一致 再次优化 优化思路:使用动作来触发,而不是请求方法 from rest_framework import viewsets viewsets...将两个类合成一个类 修改url from django.urls import pathfrom projects import viewsurlpatterns = [ path('project...中 View DRF中 APIView GenericAPIView mixins扩展类 CreateAPIView(合并拓展类) 视图集 action和请求方法的映射 ViewSet GenericViewSet...urlpath url的路径名 urlname url的别名「应用名称-url_name」 测试 $ http :8000/projects/names/ ?
优缺点 使用 ORM 最大的优点就是快速开发,让我们将更多的精力放在业务上而不是数据库上,下面是 ORM 的几个优点 隐藏了数据访问细节,使通用数据库交互变得简单易行。...对象和关系之间并不是完美映射 一般来说 ORM 足以满足我们的需求,如果对性能要求特别高或者查询十分复杂,可以考虑使用原生 SQL 和 ORM 共用的方式 Django ORM 在 Django 框架中集成了...ORM 模块,我们来看下具体的使用,部分内容会给出基于 MySQL 的 SQL 语句。...Manager 的查询方法和 QuerySet 的方法大部分同名、同意(Manager的就是基于 QuerySet 的实现的),例如 filter, exclude等,但两者也有不同的方法,例如 Manager...QuerySet 中,缓存为空。
内建基于类的视图的API 基于类的视图的API 参考。另请参见基于类的视图 的简介。...TodayArchiveView DateDetailView 基于类的视图的Mixins Simple mixins ContextMixin TemplateResponseMixin Single...基于类的视图在URL 模式中的部署使用as_view() 类方法: urlpatterns = [ url(r'^view/$', MyView.as_view(size=42)), ] 视图参数的线程安全性...参数必须对应于在类中已经存在的属性(hasattr 检查可以返回True)。 基础视图 VS. 通用视图 基于类的基础视图可以认为是父视图,它们可以直接使用或者继承它们。...Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。
最直观的做法就是 latest_post=Post.objects.filter(status=1).order_by('-id')[:1][0] 这么做是不是有点怪呢,尤其是最后的一个切片和一个取list...有没有更优雅的方案呢? latest来了 名如其意,就是取最近的/最新的一个对象,注意是一个对象,而不是一个只包含一个元素的list。怎么用呢?...sql层面一样吗 既然一个问题有了两种解决方案,那么这俩除了在语义上的区别还有什么区别,效率如何呢。先来看看他们生成的sql语句是怎样的。怎么查看呢?...用order_by执行的语句是 .. code: SELECT `blog_post`.`id`, `blog_post`.`author_id`, `blog_post`....Note Django从1.6起有了last()这个方法,可以依据主键直接取出最新的那个id。
在django中是有时区的概念的,使用时要考虑到时区的问题,默认使用的是 UTC时区,分为 navie(没时区) 和 aware(有时区),如果项目不是国际的,可以我们将时区关闭,使用本地的时间。...因为Django在处理字符串相关的Field的时候,即使这个Field的null=False,如果你没有给这个Field传递任何值,那么Django也会使用一个空的字符串""来作为默认值存储进去。...因此如果再使用null=True,Django会产生两种空值的情形(NULL或者空字符串)。如果想要在表单验证的时候允许这个字符串为空,那么建议使用blank=True。...我们可以在模型中定义一个类,叫做Meta。然后在这个类中添加一些类属性来控制模型的作用。比如我们想要在数据库映射的时候使用自己指定的表名,而不是使用模型的名称。...因此在底层,Django为Article表添加了一个属性名_id的字段(比如author的字段名称是author_id),这个字段是一个外键,记录着对应的作者的主键。
开启django自带的后台管理功能: 其实,django自带了一套功能完整可用的后台管理系统,是django.contrib包的一部分,并且可以灵活扩展我们增加的新的app功能。...自带的app,我们也可以在django的安装目录下找到。...':"mypythonblog", #数据库名称 'USER': 'xxxxxx', # 用户名 如果是sqlite3可以为空...# 服务器 'PORT': '', # 端口 默认端口可以为空 mysql默认端口为3306 } } #linux版 CentOS6.5 DATABASES...我们创建的blogapp中,有一个models.py的文件,模型的定义就在这个文件里,每一个数据模型对应一个类,只要这个类继承自models.Model。
目录 DRF 视图组件 视图组件大纲 两个视图基本类 五个扩展类 九个子类视图 视图集 常用视图集父类 魔法类 一览表 DRF中视图的“七十二变” 第一层:基于APIview的五个接口 第一层五个接口demo...第二层:基于GenericAPIView的五个接口 常用类属性: 第二层五个接口demo 第三层:基于GenericAPIView+五个视图扩展类写 第三层五个接口demo GenericAPIView...通用视图类 五个扩展类 扩展类不是视图类,没有集成APIView,需要配合GenericAPIView使用,因为五个扩展类的实现需要调用GenericAPIView提供的序列化器与数据库查询的方法...魔法类 ViewSetMixin:控制自动生成路由 一览表 DRF中视图的“七十二变” 第一层是继承APIView写,第二层基于基于GenericAPIView写,第三层基于GenericAPIView...,一个接口对应一个扩展类,注意扩展类不是视图类 ListModelMixin:获取所有API,对应list()方法 CreateModelMixin:新增一条API,对应create()方法 UpdateModelMixin
使用基于类的视图处理表单 表单的处理通常有3 个步骤: 初始的的GET (空白或预填充的表单) 带有非法数据的POST(通常重新显示表单和错误信息) 带有合法数据的POST(处理数据并重定向) 你自己实现这些功能经常导致许多重复的样本代码...为了避免这点,Django 提供一系列的通用的基于类的视图用于表单的处理。...这些通用的视图将自动创建一个ModelForm,只要它们能知道使用哪一个模型类: 如果给出model属性,则使用该模型类。 如果get_object() 返回一个对象,则使用该对象的类。...首先我们需要添加get_absolute_url() 到我们的Author 类中: #models.py from django.core.urlresolvers import reverse from...注意这里我们是如何配置通用的基于类的视图的;我们自己没有写任何逻辑: #views.py from django.views.generic.edit import CreateView, UpdateView
作者&好友:Laoqi 1、请求与响应 1.1 Request(请求) drf 传入视图的request 不再是Django默认的HttpRequest对象,而是drf 提供的拓展了HttpRequest...类的Request 类的对象。...2.1 两个视图基类 2.1.1 APIView APIView是drf 提供的所有视图的基类,继承自Django的View父类。...APIView与View的不同之处在于: 传入到视图方法中的是REST framework的Request对象,而不是Django的HttpRequeset对象; 视图方法可以返回REST framework...使用示例,基于GenericAPIView和5个视图拓展类改写接口: urls.py : from django.urls import path,re_path from app01 import views
Django小技巧16: 数据库访问优化 Posted November 05, 2018 ?...#错综复杂 翻译整理自: simpleisbetterthancomplex.com 本篇分享数据库访问优化相关, 读完这些并不是让你立即去优化代码, 更多的时候对于现有代码的优化, 需要借助Django...访问外键值 如果你只需外键的ID Python Do post.author_id Python Don't post.author.id 如果你的博文中有一个 author 的外键,Django 会自动将主键存储在属性...author_id中, 而在author属性则是一个惰性的数据库引用。...User.objects.all() len(users) # Or in template... {{ users|length }} Empty QuerySets 如果你只想知道 QuerySets 是否为空.
ORM 的目标是在编程语言中使用类似于面向对象编程的语法,而不是使用传统的 SQL 查询语言,来操作数据库。...主要思想是将数据库表的结构映射到程序中的对象,通过对对象的操作来实现对数据库的操作,而不是直接编写 SQL 查询。ORM 工具负责将数据库记录转换为程序中的对象,反之亦然。...查询语言: ORM 通常提供一种查询语言,允许开发者使用面向对象的方式编写查询,而不是直接使用 SQL。...User映射类,映射到UserDB库上,分别增加几个常用的数据库字段,并插入一些测试数据。...用户在使用ORM模型定义类时,可以同时在该映射类中定义各种针对类模型的处理函数,实现对数据的动态处理 from werkzeug.security import generate_password_hash
在django中很著名的一个框架是django-rest-framework,帮我们减少了很多工作量,尤其在序列化与反序列化成我们需要的格式帮了我们省了很多事 在这里就记录一下个人的学习过程 django-rest-framework...实现一组api的基本流程 在models.py中创建自己需要的数据模型 创建serializers.py在其中写出适合的serializer类,能够正确的序列化与反序列化 在views.py中写出合适的...api类,只需要继承rest_framework中generics中的某个类,重写我们需要的方法实现合适的逻辑即可 在urls.py中配置所需要的url 一组api的demo 创建一个model 在创建好的...官方文档:http://www.django-rest-framework.org/api-guide/serializers/ 创建serializers.py在其中实现序列化类 由于这个序列化是和我们的模型想对应的相关...,都有详细的介绍 这里我们只简单的显示所有的字段 实现视图api类 官方文档: http://www.django-rest-framework.org/api-guide/generic-views/
目录 1 问题 2 实现 1 问题 返回给前端的数据,如果数据库的字段没有数据,给返回的是null 要变成这个,全局都变成这样 2 实现 springboot返回给页面的json数据中,如果有数据为null...org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import java.io.IOException; /** * 处理 jackson 返回的null...jsonGenerator.writeString(""); } }); return objectMapper; } } 只需要加上以上的配置就可以了