- 博客(81)
- 收藏
- 关注
原创 Django REST Framework系列教程(4)——序列化器(Serializer)
在前面的文章中我们以博客为例,自定义了一个简单的类, 并分别以函数视图(FBV)和基于类的视图(CBV)编写了博客文章列表资源和单篇文章资源的API。在本文中,我们将玩转DRF的序列化器,教你如何修改序列化器,控制序列化后响应数据的输出格式, 如何在反序列化时对客户端提供过来的数据进行验证(validation)以及如何动态加载或重写序列化器类自带的方法。
2025-03-31 22:44:10
574
原创 Django REST Framework系列教程(3)——类视图APIView, GenericAPIView和视图集(ViewSet)
在前面的教程中我们介绍了什么是符合RESTful规范的API接口,并以博客为例使用了基于函数的视图(FBV)编写了文章资源的API,并测试了对文章的增删改查。在本篇文章中,我们将使用基于类的视图(Class-based View, CBV)重写之前的接口。如果你还没有阅读前两篇文章,建议先阅读。
2025-03-31 22:15:45
962
原创 Django REST Framework系列教程(2)——序列化器和视图
利用DRF开发Web API的第一步总是自定义序列化器(serializers)。序列化器的作用是将模型实例(比如用户、文章)序列化和反序列化为诸如json之类的表示形式。一个模型实例可能有许多字段属性,但一般情况下你不需要把所有字段信息以JSON格式数据返回给用户。序列化器定义了需要对一个模型实例的哪些字段进行序列化/反序列化, 并可对客户端发送过来的数据进行验证和存储。就像Django提供了Form类和ModelForm类两种方式自定义表单一样,REST framework提供了Serializer。
2025-03-30 14:30:00
913
原创 Django REST Framework系列教程(1)——简介
REST是REpresentational State Transfer三个单词的缩写,由Roy Fielding于2000年论文中提出。简单来说,就是用URI表示资源,用HTTP方法(GET, POST, PUT, DELETE)表征对这些资源进行增删查改的操作。而如果你自己开发的API被称为RESTful API,就需要遵循其规定的约束。网上有很多文章对RESTful API规范做了详细介绍, 比如阮一峰的博客和简书, 我们这里只摘取总结部分精华内容,因为我们后面会用到。
2025-03-30 14:00:00
955
原创 Django实战:使用Django SimpleUI打造美观后台
修改, 通过可以将app名改为中文,这里将tasks改成了任务管理。verbose_name = '任务管理'接着修改, 设置模型的verbose_name = "任务"verbose_name_plural = "任务"现在刷新页面,你将看到tasks英文都变成中文了。实际Django开发中,我们还会用到第三方应用app和第三方app提供的模型,我们也可以通过打补丁的方式更改第三方app或模型以及模型字段的或者label。
2025-03-29 14:30:00
1524
原创 Django实战:使用session实现用户免登录凭邀请码访问网页
有读者问如何利用Django开发这样一个权限功能:用户不用登录凭邀请码即可访问特定内容,且每次邀请码验证成功后还需要限制用户的访问时间。今天小编我就来分享下如何利用session实现这个需求。文末附有源码地址,使用Django 3.1开发,适合新人拿django的session框架练手。
2025-03-29 14:15:00
876
原创 Django实战:打造美观的管理后台
Django自带管理后台(admin)功能强大,允许我们对模型数据进行过滤筛选和增删改查,但是不够美观, 一般仅限内部人员使用。本例将演示如何使用和打造功能性强且美观的管理后台,前端使用Boostrap 4。
2025-03-28 14:30:00
1066
原创 Django实战:开发一个CRUD小应用
在中,我们利用了Django基于函数的视图编写一个任务管理小应用,实现创建(Create)一个任务,查看(Retrieve)任务清单和单个任务详情,更新(Update)一个任务和删除(Delete)一个任务。本例中我们将使用Django基于类的视图(CBV)重写之前的小应用程序, 一共只有16行核心代码。本例只讲述核心逻辑,不浪费时间在前端样式上。
2025-03-28 14:15:00
1515
原创 Django系列教程(28)——性能优化大全
如果按例4操作,我们会将每篇文章对象的全部信息都提取出来载入到内存中,不仅花费更多时间查询,还会大量占用内存,而最后只用了title这一个字段,这是完全没有必要的。缓存是一类可以更快的读取数据的介质统称,也指其它可以加快数据读取的存储方式。比如当你的数据库有100万篇文章时,每页即使展示100篇,也需要1万页展示给你的用户,这是完全没有必要的。其中响应时间(服务器从接收用户请求,处理该请求并返回结果所需的总的时间)通常是最重要的指标,因为过长的响应时间会让用户厌倦等待,转投其它网站或APP。
2025-03-27 14:15:00
785
原创 Django系列教程(27)——Docker部署
Django在生产环境的部署还是比较复杂的, 令很多新手望而生畏, 幸运的是使用Docker容器化技术可以大大简化我们Django在生产环境的部署并提升我们应用的可移植性。Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux机器上。本文将详细介绍如何使用docker-compose八步部署Django + Uwsgi + Nginx + MySQL + Redis (多容器组合)。
2025-03-27 10:15:00
1332
原创 Django系列教程(26)——国际化
到此你只需记住一点:我们实现了中英对照翻译,但这个翻译不是浏览器翻译的,Django也不会帮你翻译。我们需要对前面标记的字符串进行手动翻译,并生成编译过后的消息文件供Django使用。但是当你切换不同语言时,页面显示的内容还是一样的,这是因为我们还没对那些字符串进行翻译啊。的文件,内容如下所示。这个就是Django最后需要调用的翻译文件,里面包含了翻译过后的字符串列表。标签来标记了两个需要翻译的字符串,一个是模板中已存在的字符串,一个是视图函数传递过来的变量。你可以看到需要翻译的字符串,但翻译内容为空。
2025-03-26 14:15:00
1135
原创 Django系列教程(25)——日志管理
只需几行配置,sentry就会监控你的程序运行,自动收集错误和异常以及上下文数据,发送到sentry的服务器上,开发者可以通过sentry的web端实时查看错误和异常。比如INFO级别及以上的日志我们写入到log文件里保存,ERROR级别及以上的日志我们直接通过邮件发送给系统管理员。每一条日志信息记录了一个事件的发生。, 其作用是滚动生成日志文件,当单个日志的文件大小达到上限时,会生成新的日志文件。配置就这么简单,你以后都可以通过sentry的web端直接查看Django项目运行的错误和异常了。
2025-03-26 10:15:00
1163
原创 Django系列教程(24)——异步和周期性任务
Django Web项目中我们经常需要执行耗时的任务比如发送邮件、调用第三方接口、批量处理文件等等,将这些任务异步化放在后台运行可以有效缩短请求响应时间。另外服务器上经常会有定时任务的需求,比如清除缓存、备份数据库等工作。Celery是一个高效的异步任务队列/基于分布式消息传递的作业队列,可以轻松帮我们在Django项目中设置执行异步和周期性任务。本文将详细演示如何在Django项目中集成Celery设置执行异步和周期性任务并总结下一些注意事项。
2025-03-25 14:15:00
956
原创 Django系列教程(23)——自定义admin管理命令
每次在启动Django服务之前,我们都会在终端运行的管理命令。其实我们还可以自定义管理命令,这对于执行独立的脚本或任务非常有用,比如清除缓存、导出用户邮件清单或发送邮件等等。自定义的管理命令不仅可以通过manage.py运行,还可以通过Linux或Celery的crontab服务将其设成定时任务。本文主要讲解如何自定义Django-admin命令,并提供一些演示案例。自定义Django-admin命令一共分三步:创建文件夹布局、编写命令代码和测试使用。
2025-03-25 10:00:00
815
原创 Django系列教程(22)——信号机制及示例
Django的内置信号在大多数情况下能满足我们的项目需求,但有时我们还需要使用自定义的信号。在Django项目中使用自定义信号也比较简单,分三步即可完成。每个自定义的信号,都是Signal类的实例。这里我们首先在app目录下新建一个signals.py文件,创建一个名为my_signal的信号,它包含有msg这个参数,这个参数在信号触发的时候需要传递。当监听函数收到这个信号时,会得到msg参数的值。
2025-03-24 14:15:00
1041
原创 Django系列教程(21)——中间件原理及示例
中间件(middleware)是一个镶嵌到Django的request(请求)/response(响应)处理机制中的一个钩子(hooks) 框架。它是一个可以修改Django全局输入或输出的一个底层插件系统。上面这段话是Django官方文档中对于中间件的介绍,非常抽象难懂。小编我来尝试用浅显的语言再介绍一遍吧。我们首先要了解下Django的request/response处理机制,然后再看看中间件在整个处理机制中的角色及其工作原理。
2025-03-24 10:15:00
923
原创 Django系列教程(20)——权限详解
权限是能够约束用户行为和控制页面显示内容的一种机制。一个完整的权限应该包含3个要素: 用户,对象和权限,即什么用户对什么对象有什么样的权限。假设我们有一个应用叫blog,其包含一个叫Article(文章)的模型。那么一个超级用户一般会有如下4种权限,而一个普通用户可能只有1种或某几种权限,比如只能查看文章,或者能查看和创建文章但是不能修改和删除。查看文章(view)创建文章(add)更改文章(change)删除文章(delete)
2025-03-23 14:15:00
1219
原创 Django系列教程(19)——多种缓存配置方式
缓存是一类可以更快的读取数据的介质统称,也指其它可以加快数据读取的存储方式。一般用来存储临时数据,常用介质的是读取速度很快的内存。一般来说从数据库多次把所需要的数据提取出来,要比从内存或者硬盘等一次读出来付出的成本大很多。对于中大型网站而言,使用缓存减少对数据库的访问次数是提升网站性能的关键之一。当你的模型有所变化(比如删除或更新)时,你还需及时地清除老的缓存,这个可以通过Django的信号机制实现。
2025-03-23 10:15:00
1154
原创 Django系列教程(18)——数据库Queryset特性及高级查询技巧
QuerySet是Django提供的强大的数据库接口(API)。正是因为通过它,我们可以使用filterexcludeget等方法进行数据库查询,而不需要使用原始的SQL语言与数据库进行交互。从数据库中查询出来的结果一般是一个集合,这个集合叫就做 queryset。
2025-03-22 14:15:00
1238
原创 Django系列教程(17)——配置文件
当我们使用命令创建一个Django项目时,你会发现生成的已经包含了部分基本的默认设定,我们只需要修改和添加我们需要使用的设定就好了。一个项目完整的全局默认设置在文件中。Django在编译时,会先载入global_settings.py中的全局默认配置值,然后加载用户指定的,重写部分全局默认设置。
2025-03-22 10:00:00
652
原创 Django系列教程(16)——Ajax发送数据与接收数据
Django前端模板向后端发送POST请求主要有两种方式:form表单和ajax请求。本文将详细介绍Django与Ajax的交互方式,如何通过csrftoken认证,并提供了两个具体示例。
2025-03-21 23:06:09
618
原创 Django系列教程(15)——上传文件
Django默认的存储地址是相对于根目录的/media/文件夹,存储的默认文件名就是文件本来的名字。另外用户还可能上传一些不安全的文件如js和exe文件,我们必需对允许上传文件的类型进行限制。,并通过clean方法对用户上传的文件进行验证,如果上传的文件名不以jpg, pdf或xlsx结尾,将显示表单验证错误信息。使用Django上传文件创建模型不是必需,然而如果我们需要对上传文件进行系统化管理,模型还是很重要的。选项指定了文件上传后存储的地址,并对上传的文件名进行了重命名。,由File模型重建的。
2025-03-21 23:04:10
648
原创 Django系列教程(14)——分页及通用模板
Django作为Python Web开发框架的一哥,提供了企业级网站开发所需要的几乎所有功能,其中就包括自带分页功能。利用Django自带的Paginator类,我们可以很轻松地实现分页。本章将介绍如何在函数视图和基于类的视图中使用分页,并提供两个用于展示分页链接的通用模板。
2025-03-16 10:45:00
771
原创 Django系列教程(13)——Cookie和Session应用场景及案例
cookie是一种数据存储技术, 它是将一段文本保存在客户端(浏览器或本地电脑)的一种技术,并且可以长时间的保存。当用户首次通过客户端访问服务器时,web服务器会发送给客户端的一小段信息。客户端浏览器会将这段信息以cookie形式保存在本地某个目录下的文件内。当客户端下次再发送请求时会自动将cookie也发送到服务器端,这样服务器端通过查验cookie内容就知道该客户端之前访问过了。判断用户是否已经登录记录用户登录信息(比如用户名,上次登录时间)记录用户搜索关键词。
2025-03-16 10:30:00
873
原创 Django系列教程(12)——连接MySQL和PostgreSQL数据库
Django默认使用免费的SQLite数据库,你无需进行任何设置开箱即可使用。但是在生产环境中部署正式项目时,你应该使用性能更优越的企业级数据库,比如MySQL和Postgres。本文将介绍SQLite的优缺点以及如何在Django项目中连接MySQL和Postgres数据库。
2025-03-15 15:30:00
1124
原创 Django系列教程(11)——管理后台(Admin)入门
我们需要自定义数据表中哪些字段可以显示,哪些字段可以编辑,并对数据表中的条目进行排序,同时定义过滤选项。Django的ModelAdmin自带的和ordering选项可以轻松帮我们做到。要自定义数据表显示字段,我们只需对上述代码做出如下改进。我们先定义类,然后使用方法即可。# 定制哪些字段需要展示# list_display_links = ('title', ) # 默认# sortable_by # 排序'''定义哪个字段可以编辑''''''分页:每页10条''''''最大条目'''
2025-03-15 10:15:00
1669
原创 Django系列教程(10)——表单设计、验证与使用
Django提供了两种自定义表单的方式:继承Form类和ModelForm类。# 自定义表单字段# 根据模型创建注意:Django模型里用来给字段添加一个别名或描述, 而表单用的是label。自定义的表单类一般位于app目录下的forms.py,这样方便集中管理表单。如果要使用上述表单,我们可以在视图里views.py里把它们像模型一样import进来直接使用。对于每个字段你可以设置其是否为必需,最大长度和最小长度。你还可以针对每个字段自定义验证错误信息,见下面代码。
2025-03-14 15:00:00
1262
原创 Django系列教程(9)——模板语言、常用标签与过滤器
Django的模板是静态的html文件,它决定了一个页面的样式或外观。Django把视图(View)传递过来的数据与模板相结合动态地渲染出一个完整的html页面。这样做的好处是实现了数据和样式的分离。本章将介绍Django的模板语言, 常用模板标签及过滤器以及如何正确地配置模板和静态文件的存放路径。
2025-03-14 10:00:00
677
原创 Django系列教程(8)——函数视图及通用类视图
Django的Web开发也遵循经典软件设计MVC模式开发的。View (视图) 主要根据用户的请求返回数据,用来展示用户可以看到的内容(比如网页,图片),也可以用来处理用户提交的数据,比如保存到数据库中。Django的视图(views.py)通常和URL路由(URLconf)一起工作的。服务器在收到用户通过浏览器发来的请求后,会根据用户请求的url地址和urls.py里配置的url-视图映射关系,去执行相应视图函数或视图类,从而返回给客户端响应数据。我们先看一个最简单的函数视图。当用户发来一个请求。
2025-03-13 23:17:39
1323
原创 Django系列教程(7)——路由配置URLConf
Django的项目文件夹和每个应用(app)目录下都有urls.py文件,它们构成了Django的路由配置系统(URLconf)。服务器收到用户请求后,会根据用户请求的url地址和urls.py里配置的url-视图映射关系,去调用执行相应的视图函数或视图类,最后由视图返回给客户端数据。一个优美的URL不仅层次分明、逻辑清晰,而且便于搜索引擎收录。一个糟糕的URL不仅可读性差,而且易造成程序冲突。本章小编我将给大家详细介绍下如何在Django项目开发中进行路由配置。
2025-03-13 23:06:55
1160
原创 Django系列教程(6)——ORM数据增删改查接口
Django的对象关系映射系统(Object-Relational Mapper, ORM)提供了丰富的数据查询接口, 让你无需使用原生SQL语句即可通过对模型的简单操作实现对数据库里的数据进行增删改查。查询得到的结果叫查询集(QuerySet), 所以这个接口被称为QuerySet API。今天我们就以博客blog为例,演示下Django是如何通过模型对数据库进行增删改查的。
2025-03-09 17:11:56
1522
原创 Django系列教程(5)——Django模型详解
假设你要开发一个名叫bookstore的应用,专门来管理书店里的书籍。我们首先要为书本和出版社创建模型。出版社有名字和地址。书有名字,描述和添加日期。我们还需要利用ForeignKey定义了出版社与书本之间单对多的关系,因为一个出版社可以出版很多书,每本书都有对应的出版社。我们定义了Publisher和Book模型,它们都继承了。你能看出代码有什么问题吗?模型创建好后,当你运行CharField里的max_length选项没有定义里的on_delete选项有没有定义。
2025-03-08 22:37:22
1042
原创 Django系列教程(3)——Django的MVT设计模式
当用户发来一个请求(request)时,Django会对请求头信息进行解析,解析出用户需要访问的url地址,然后根据路由urls.py中的定义的对应关系把请求转发到相应的视图处理。Django的MVT设计模式由Model(模型), View(视图) 和Template(模板)三部分组成,分别对应单个app目录下的models.py, views.py和templates文件夹。光编写视图(views.py)还不够,我们还得为写好的视图函数配置路由,这样才能将视图函数与用户的请求地址建立好对应关系。
2025-03-07 19:14:31
1438
原创 Django系列教程(2)——Django的安装及第一个项目
更好的方式每个项目都有自己独立的开发环境,然后把项目所有依赖安装到隔离的环境中去,这就是虚拟环境的作用。如果你使用PyCharm创建Django项目的话,可以省去很多麻烦,只需在创建Django项目勾选使用Virtualenv创建虚拟环境,并选择合适的Python编译器版本即可。在Linux系统的命令行或windows的CMD终端中输入python即进入Python交互环境(shell),然后可通过查看已安装的Django版本来确定Django已安装成功。, 新增一个名为index的视图函数。
2025-03-07 18:48:35
1022
原创 Django系列教程(1)——Django简介
由于客户端的开发语言与后台的开发语言经常不一样,这时需要后台能够提供可以跨平台跨语言的一种标准的资源或数据(如Json格式)供前后端沟通,这就是Web API(网络应用程序结口)的作用了。Django这种基于MVC开发模式的传统框架,非常适合开发基于PC端的前后端不分离的传统网站,因为它同时包括了后端的开发(逻辑层、数据库层) 和前端的开发(如模板语言、样式、JS)。
2025-03-06 21:27:43
887
原创 Libgdx游戏开发系列教程(7)——开始游戏界面实现
上篇文章也是讲解了如何实现暂停,但实际上,上篇的做法可能不够优雅因为暂停和游戏界面我们可以分成2个Screen对象,这样只需要监听键盘输入,更改显示不同的Screen对象即可本文的实现目标:使用Screen来实现,进入游戏前,先显示一个游戏主界面,点击则开始游戏。
2025-03-06 20:01:30
703
原创 Libgdx游戏开发系列教程(6)——游戏暂停
暂停也是一个游戏的必要功能了,本文研究了Libgdx实现游戏暂停例子以桌面端游戏实现讲解为主,至于移动端,可能之后会进行补充...本文最终实现的就是按下esc暂停,之后会出现一个界面提示,表示当前已经暂停重新按下esc,则返回继续游戏本篇稍微学习了下libgdx里的输入事件监听。
2025-03-05 23:26:17
1148
原创 Libgdx游戏开发系列教程(5)——碰撞反弹的简单实践
本篇简单以一个小球运动,一步步实现碰撞反弹的效果本文代码示例以kotlin为主,且需要有一定的Libgdx入门基础注:下面动态图片看着有些卡顿,是录制的问题,实际上运行时很流畅的。
2025-03-05 23:01:08
845
原创 Libgdx游戏开发系列教程(4)——显示中文文字
这里主要介绍关于在Libgdx显示文字的2种方法本文代码示例采用kotlin代码进行讲解,且需要有libgdx入门基础。
2025-03-04 22:39:16
987
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人