Django 是 Python 的 一款 Web 开发框架,另外还有 Tornado,Flask,Twisted。为什么我要选择学 Django?...这其实就是 ORM,即 Object Relational Mapping,对象关系映射,把程序代码中的对象映射到关系型数据库中,不用写 SQL,就可以直接操作数据了。ORM 实现了数据持久化。...我们都知道程序是运行在内存中的,跑完就没了。为了把数据保存下来,就需要使用 ORM 技术把内存中的数据(程序对象)存到关系型数据库中,进而转移到磁盘上。Django 自带了一个 ORM,开箱即用。...匹配到第一个后就会停止查找,调用回调函数。如果找完了都没有,就会调用 404 这个特殊 view,表示没找到。 编写 views 在 views 中编写回调函数。...小结 本文以 Web 后台为例,讲解了从 model,到 ORM,到数据操作,到 URL 映射,到 views 回调函数的编写链路。实际操作会复杂得多。
但是,它的历史来源却充满了神秘和诱人的探索。21世纪初,甚至有一群人试图研究404错误的来源。 我只知道404是网页错误,但我不知道它来自哪里。...据说在第三次科技革命之前,整个互联网就像一个大型的中央数据库,设置在一个叫404的房间里。当时所有的访问请求都是手动完成的。...如果在数据库中找不到要求者需要的文件,或者因为要求者写错了文件号,他们会得到一个room404:filenotfound的回复信息。 网站404谁都见过。你知道为什么是404吗?...事实上,在因特网诞生后不久,错误的网址访问也随之而来。当我们享受因特网所带来的知识、方便时,自然也要忍受404错误所带来的痛苦,或者说‘一切都是两面的’。...另外,我完全没想到‘404错误’的来源就是这个想法,也许每个人都更喜欢一些非理性、神秘的故事吧,当然这在人类中很常见,当人的影响力小,信息传播缓慢时,这些非理性的特质是无罪的。
类似于Django后台系统中定义的权限访问方式如下: 访问视图中的’add’表单处理函数并且尝试添加一个对象的情况下,至少需要一个对该对象操作的’add’权限才可以 访问视图中的’change’处理函数...,并且尝试进行对象数据更新的情况下,至少需要一个对该对象操作 ‘change’权限才可以 访问视图中的’delete’处理函数并尝试删除一个对象时,至少需要一个该对象的’delete’权限才可以 权限的设置不仅仅可以指定在类型上...默认情况下,当我们在项目中执行数据库操作migrate时,添加在INSTALLED_APPS列表中的权限认证模块django.contrib.auth需要的数据都会被执行到数据库中,并添加对应的默认权限操作...这个问题最直接的解决方案就是如果进行了权限更新的话,为了不受缓存数据的影响,直接从数据库中重新获取用户数据即可!...()函数添加的用户信息从系统中移除,logout()函数需要一个HttpRequest请求对象参数,无返回值。
在 Django 中,form.save() 方法是用于将表单中的数据保存到数据库的核心方法。...它的功能和实现可以分为几个重要的部分,下面就是我对 form.save() 方法的详细分析:1、问题背景在 Django 中,我们经常会使用 Form 来处理用户提交的数据。...这意味着当我们调用 save 方法时,我们需要传递一个 user 参数,以便将当前用户与正在保存的产品关联起来。...如果我们不调用 super,那么 save 方法就不会保存对象,而只是返回一个未保存的对象。2.4 编辑和保存新产品时的区别当我们编辑和保存新产品时,save 方法的调用方式是一样的。...form.save() 是 Django 表单系统中的一个核心方法,特别是对于 ModelForm,它简化了将表单数据保存到数据库的过程。
确定当前有哪些用户 我们迁移数据库时,Django将对数据库进行修改,使其能够存储主题和用户之间的关联。为 执行迁移,Django需要知道该将各个既有主题关联到哪个用户。...Django询问要将既有主题关联 到哪个用户时,我们将指定其中的一个ID值。 3. 迁移数据库 知道用户ID后,就可以迁移数据库了。...在2处的输出中,Django指出我们试图给既有 模型Topic添加一个必不可少(不可为空)的字段,而该字段没有默认值。...代码 Topic.objects.filter(owner=request.user)让Django只从数据库中获取owner属性为当前用户的 Topic对象。...Django的意思是说,创建新主题时,你必须指定其owner字段的值。 由于我们可以通过request对象获悉当前用户,因此存在一个修复这种问题的简单方案。
(7)使用模型 Django项目中 manage.py 脚本包含了操作数据库的功能。syncdb只能保证所有模型类都有对应的数据库表,但不会修改已经存在的数据库表。...现在需要好好的研究一下了! (12)中间件 !!! Django的中间件就是Python的一个类,实现一个特定的接口。...在模板中输出context变量时,会隐式的调用unicode方法。如果试图打印没有__unicode__方法的对象,在模板中是不可见的。...(20)保存 ModelForm 有一个save()方法,可以将信息保存为数据库里的一条记录,然后返回Model对象结果。...当有关联对象时,Django会给表单添加一个额外的方法 save_m2m (21)区别于Model ModelForm的Meta嵌套类允许你定义两个可选属性,fields和exclude
有的同学可能比较好奇,你说naive datetime无法转换成时间戳,那么为什么这个对象有一个timestamp()方法呢: ?...模板中展示的时间 对于网站的用户来说,他们想看到的时间显然不是UTC时间,而是某一个具体时区的时间。比如,我的网站几乎全部是中国用户,那么展示时使用的时区应该是Asia/Shanghai。...now_time,我直接将object.now_time返回;返回对象的local_time,我将数据库值转换成本地时间timezone.localtime(object.local_time)返回。...我前文说过,这两个值在数据库中的值是完全相等的,不过在json返回中,now_time是UTC时间,而local_time是北京时间: ?...通常情况下我们有两种常见的判断方法。一是,用户访问时,直接从model中取出这个对象,然后和now()进行比较: ?
随便新建一个Django项目,默认会自动为我们创建一个/project_name/urls.py文件,并且自动包含下面的内容,这就是项目的根URL: 配置media媒体文件 settings.py #...QuerySet实例 就是从数据库根据自己要求拿数据的 连数据都那不出来,写啥视图 所以在编写queryset必须用django shell 调试 在model中,Django通过给Model增加一个objects...这样就可以引用模型字段值并使用它们执行数据库操作,而无需实际将它们从数据库中拉出到Python内存中 说白了就是我从数据库拿东西,但是有些需要的字段没有,要通过绑定的外键的app的model拿。...但是名称又是app__字段来命名,这样我要改名称,而且拿第一次的model,放在python内存中,再拿通过外键绑定的另一个model,又要执行第一次步骤,那个效率就不行了,干嘛我不一起拿,所以会用annotate...banner模型外键绑定news中的title字段,拿出来它叫news__title,我要给它换个名字叫news_title,这就是注释。
本篇笔记继续跟着django官方文档创建了一个投票的应用。 它由两部分组成: 一个让人们查看和投票的公共站点。 一个让你能添加、修改和删除投票的管理站点。 ...model层里的一个类就是一个数据表,一行就是一个对象,一列就是一个对象的一个属性。...为我们生成了一个0001_initial.py,他是一个中间文件,执行迁移数据库的命令后,django会依赖这个文件去帮我们创建数据库表。...这个视图函数负责接受表单里的数据,然后将其添加到数据库中。 polls/views.py # Django自带的渲染函数,默认已经引入,404处理函数。...2、改良视图 在视图中,我们是通过get方法获取数据表中的数据然后赋值给一个变量(对象),但我们也可以直接把数据表搬到视图中,这应该就是所谓的通用视图吧。
authenticate()会在User 对象上设置一个属性标识那种认证后端认证了该用户,且该信息在后面的登录过程中是需要的。...当我们试图登陆一个从数据库中直接取出来不经过authenticate()的User对象会报错的!!...对象,以及一个认证了的User对象 此函数使用django的session框架给某个已认证的用户附加上session id等信息。...该函数接受一个HttpRequest对象,无返回值。当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。...User对象中有一个名为groups的多对多字段, 多对多关系由auth_user_groups数据表维护。Group对象可以通过user_set反向查询用户组中的用户。
,为什么get请求就能找到类的get方法,post请求就能找到post方法,其内部有个dispatch方法来进行分发,这又怎么玩呢,看源码啦,从哪里看呢?...在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。...一般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使用复数。 ...他和put用哪个都可以,没有太大的区别,我们用put方式偏多 DELETE(DELETE):从服务器删除资源。 还有两个不常用的HTTP动词。 HEAD:获取资源的元数据。...410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
当我们把”test”加到请求url的末尾,服务器返回了404。同时服务器也返回了这样一个信息:Named SQL not found。如果我们尝试”test”之外的其他字符串,得到了同样的返回信息。...我们把这个请求发到Burp 的 intruder模块,打算试图过一个目录列表字典来枚举潜在的参数名,看看是否能得到除了404之外的返回。但是有一个更简单的方法来找到合适的参数名。...我们把name的值放进先前尝试的GET请求中。 Hey!我们得到一些返回!但是我们少了一个参数,让我们加进来! 虽然没有从服务器获得任何返回,但是也没有返回任何错误!...SQL Execution 这就是createNamedSQL中在包体里面包含一个空json对象的POST请求: 我们得到一个关于SQL_NAME列的错误,当我们在包体中包含空的json对象时这不是很意外...试一下 我们能否抓取出用户的哈希. 我们可以获得数据库中的用户密码的哈希值。我编辑和删除了主要的部分。知道了我们是一个具有administrator权限的用户,当然后续我们还可以做很多事情。
Django异常 DJango会抛出一些它自己的异常,以及Python的标准异常。 Django核心异常 Django核心异常类定义在django.core.exceptions中。...这个异常的一个基础版本在django.core.exceptions中提供。每个模型类都包含一个它的子类版本,它可以用于定义返回多个对象的特定的对象类型。 详见get()。...排序造成了一个死循环。 关键词不能由过滤器参数解析。 字段不能由查询参数中的关键词决定。 连接(join)不能在指定对象上使用。 字段名称不可用。 查询包含了无效的 order_by参数。...NoReverseMatch exception NoReverseMatch[source] 当你的URLconf中的一个匹配的URL不能基于提供的参数识别时,NoReverseMatch 异常由 django.core.urlresolvers...``ProtectedError 使用django.db.models.PROTECT时,抛出异常来阻止所引用对象的删除。
我是使用 PyCharm 作为开发工具。PyCharm 在新建项目的时候,会自动生成一个 SQLite 数据库。如果你使用 MySQL 数据库,你需要自行创建数据库。...我新建一个名为 Django_demo 的项目,在根目录有个名为 db 的 SQLite 数据库。 ?...点击当前选项卡的左上角的“ + ”号 =》Data source =》选择跟你新建数据库时相同的数据库。我新建数据库是选择 Sqlite ,所以选择 Sqlite 连接。 ?...当我们在 model.py 对这两个模型类修改完成之后,我们需要通知数据库:“我模型已经修改了,你数据库也要更新呀”。 只需要执行上步的两行命令即可 ?...3)使用 QuerySet API 查询数据 从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet。而一旦我们建立好数据模型,Django 会自动为我们生成一套数据库抽象的API。
的key在数据库中是否存在 request.session.exists("session_key") # 删除当前会话的所有Session数据 request.session.delete() ...Django在设置session时是针对浏览器的,如果同一台电脑的同一浏览器,多用户登录时在数据库中只会产生一条记录,但是不影响各个用户对session值的取用。...由于中间件是全局的,当我们需要做一些全局性的功能时应该首先选择中间件,如:全局的用户登录校验、全局的用户访问频率的校验、全局的用户权限校验(用中间件是相当简单的),这里需要说一点django的中间件是所有框架里面做的最完善的...', 'app01.TestMiddleware.TestMiddleware2' ] 此时,我们访问一个视图,会发现终端中打印如下内容: test中间件 process_response 当我们注销第一个自定义中间件的...1.请求来的时候会按照settings配置文件中从上往下的顺序,依次执行每一个中间件内部定义的process_request方法,如果中间件内部没有该方法直接跳过执行下一个中间件。
在处理请求时,Django 从 urlpatterns 中的第一个模式开始,沿着列表向下移动,将所请求的 URL 与每个模式进行比较,直到找到一个匹配的。...path() argument: view 当 Django 找到匹配的模式时,它调用指定的视图函数,第一个参数是 HttpRequest 对象,从路由中“捕获”的任何值都是关键字参数。...迁移功能非常强大,它允许您在开发项目时随着时间的推移更改模型,而不需要删除数据库或表并创建新表——它专门用于实时升级数据库,而不会丢失数据。...删除-显示删除确认页面。 如果“Date published”的值与教程 1 中创建问题时的时间不匹配,这可能意味着您忘记为 TIME_ZONE 设置正确的值。...还要注意在“问题”旁边的“添加另一个”链接。每一个与其他对象具有 ForeignKey 关系的对象都可以免费得到这个。当你点击“添加另一个”,你会得到一个弹出窗口的“添加问题”形式。
,则是对应的类中的一个方法。...This is your first Django") 根据前面的学习我们得知,当我们在浏览器中输入 http://localhost:8000/demo_app/时,Django 的路由规则会将这个请求分配到这个...---- 模板 在视图中你可以操作数据库,可以使用模板引擎(Django自带的,或者第三方的)等,Django 对视图的要求是返回一个 HttpResponse,或者抛出异常。...我们现在就来演示下Django 如何使用模板系统。 我们通过登录到后台管理系统新建几个Cat对象(也可通过Django自带的数据库API),我们将在视图中通过模板使用他们。...在Django的配置文件中默认设置了 APP_DIRS为True,这一选项会让Django在每个 INSTALLED_APPS文件夹中寻找 templates子目录。
1 概况 Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」。比如,在一个博客应用中,你可能会创建如下几个视图: 博客首页——展示最近的几项内容。...你的视图可以从数据库里读取记录,可以使用一个模板引擎(比如 Django 自带的,或者其他第三方的),可以生成一个 PDF 文件,可以输出一个 XML,创建一个 ZIP 文件,你可以做任何你想做的事 3.1...示例:让视图从数据库里读取记录 这里举例了一个 polls/views.py 的小修改。...: get_object_or_404() 尝试用 get() 函数获取一个对象,如果不存在就抛出 Http404 错误也是一个普遍的流程。...还有,为什么模型 API 不直接抛出 ObjectDoesNotExist 而是抛出 Http404 呢? 因为这样做会增加模型层和视图层的耦合性。
但是我们需要做很多工作来定制Django的API服务,特别是定制JSON响应。 03 为什么使用Go 正如之前所说,Go语言是我所见过和使用过的最简单的语言。但这只是吸引我的第一点。...Python是一门伟大而有趣的语言,但有时你会遇到不寻常的异常,因为你试图把变量当作整数来使用,结果却发现它是一个字符串。...每当我们需要处理一些内部请求时,我们就用单独的Goroutine来处理它,它在资源上比Python线程便宜10倍。因此,我们节省了大量的资源(内存、CPU),因为语言的内置特性。...#5 伟大的IDE支持和调试 当您试图切换编程语言时,IDE支持是最重要的事情之一。舒适的IDE平均可以节省80%的编码时间。...我们的后端和API服务的性能提高了30%。现在我们可以实时处理日志记录,将其传输到数据库,并使用Websocket从单个或多个服务进行流处理!这是Go语言特性的一个很好的结果。
当你创建一个表单为了修改服务器端的数据时,请使用 method=”post” 。这不是 Django 特定的技巧;这是优秀的 Web 开发实践。...总之,所有的 POST form 针对内部的 URLs 时都应该使用 {% csrf_token %} 模板标签。 现在,让我们来创建一个 Django 视图来处理提交的数据。 记得吗?...在 polls/views.py 中添加如下代码: from django.shortcuts import get_object_or_404, render from django.http import...这些视图代表了基本的 Web 开发中一种常见的问题: 根据 URL 中的参数从数据库中获取数据,加载模板并返回渲染后的内容。...通常情况下,当你编写一个 Django 应用时,你会评估下通用视图是否适合解决你的问题, 如果适合你就应该从一开始就使用它,而不是进行到一半才重构你的代码。
领取专属 10元无门槛券
手把手带您无忧上云