精华内容
下载资源
问答
  • 2021-11-29 14:49:21

    Django 开源项目

    了解 Django 项目本身的开发进程以及你如何为 Django 做贡献:

    一、社区:

    如何参与其中

    为 Django 做贡献

    Django 是一个以志愿者为生的社区。随着它的不断发展,我们总是需要更多的人来帮助他人。您可以通过多种方式做出贡献,无论是在框架本身还是在更广泛的生态系统中。

    在 Django 框架上工作

    Django 本身的工作分为三个主要领域:

    写代码💻

    修复错误或添加新功能。您可以发出拉取请求并在下一版本的 Django 中查看您的代码!

    从写代码文档开始。

    所以你想写一些代码来改进 Django?有几种方法可以帮助 Django 的开发:

    报告我们的票务跟踪器中的错误。
    加入django-developers邮件列表并分享您对如何改进 Django 的想法。我们总是乐于接受建议。您还可以在Django 论坛和#django-dev IRC 频道上进行互动。
    为新的和/或固定的行为提交补丁。如果您正在寻找一种开始为 Django 做贡献的方法,请阅读写 你的第一个 Django 打补丁教程,并查看轻松挑选的 门票。该补丁评审列表,也将是有益的。

    改进文档或编写单元测试。
    对其他用户创建的故障单进行分类并查看补丁。
    阅读对新贡献者的建议,帮助您在开发过程中定位。

    浏览以下部分以了解如何为您的代码补丁提供包含在 Django 核心中的最佳机会:

    • 编码风格
    • 单元测试集
    • 提交打样
    • 使用 Git 和 GitHub 工作
    • JavaScript

    编写文档✍️

    Django 的文档是其主要优势之一。它内容丰富且全面。您可以帮助改进文档并随着框架的发展保持其相关性。

    官方极其重视文档的一致性和可读性。毕竟,Django 是在需要快速发布新闻的环境下开发的!所以,我们像对待我们的代码一样对待我们的文档:我们期望尽可能频繁地更新它。

    一般来说,文档会在以下两种情况时更新:

    • 一般改进:通过更清晰的书写和更多示例,更正、修复文档错误,更好的解释功能。
    • 新特性:自上一个版本发布后,添加到框架中的功能文档。

    获得原始文档

    Django 文档可在 https://docs.djangoproject.com/ 以网页的形式阅读,但我们以一种更灵活的方式编辑它——一系列的文本文件。这些文件位于 Django 的每个发布分支的顶级目录 docs/ 下。

    如果你想开始为我们的文档做贡献,请从源代码库中获取 Django 的开发版本(见 安装开发版本)。开发版有最新、最棒的文档,就像它有最新、最棒的代码一样。在提交者的决定下,我们也会将文档的修正和改进向后移植到最后的发行分支。这是因为让最后一个发行的文档是最新的和正确的是非常有利的(见 版本之间的差异)。

    开始使用 Sphinx

    Django 的文档使用 Sphinx 文档系统——基于 docutils。基本思想是将轻量格式话的纯文本转化为 HTML,PDF 或其它任意输出格式。

    要在本地构建文档,请安装 Sphinx:

    $ python -m pip install Sphinx
    

    然后从 docs 目录下,编译 HTML:

    $ make html
    

    发布进程

    Django 的发行流程
    正式发行

    Django 的发行编号如下方式工作:

    版本编号为 A.B 或 A.B.C 形式。
    A.B 是 功能发行 的版本号。每个版本都将基本向后兼容前一个版本。这个规则的例外情况将在发行说明中列出。
    C 是 补丁发行 的版本号,对于错误修复和安全发行来说,它是递增的。这些版本将 100% 向后兼容前一个补丁版本。唯一的例外是当有一个安全或数据丢失的问题无法在不破坏向后兼容的情况下被修复。如果发生这种情况,发行说明将提供详细的升级说明。
    在一个新的功能发行之前,我们会发布 alpha、beta 和候选发行。这些发行的形式是 A.B alpha/beta/rc N,意思是 A.B 版本的第 N 个 alpha/beta/候选发行。
    在 git 中,每个 Django 发行都会有一个标签,表示它的版本号,用 Django 的发行密钥签名。此外,每个发行系列都有自己的分支,称为 stable/A.B.x,bugfix/security 版本将从这些分支发布。

    关于 Django 项目如何出于安全目的发布新版本的更多信息,请参见 我们的安全政策。

    功能发行

    功能发行(A.B,A.B+1,等等)大约每 8 个月进行一次 —— 详情请见 release process 。这些发行将包含新的功能,对现有功能的改进等等。
    补丁发行
    补丁版本(A.B.C,A.B.C+1 等等)将根据需要发布,以修复错误和/或安全问题。

    这些版本将与相关的功能版本 100% 兼容,除非由于安全原因或为了防止数据丢失而无法做到。因此,“我应该升级到最新的补丁版本吗?” 的答案将永远是 “是的”。

    长期支持发行

    某些功能版本将被指定为长期支持(LTS)版本。这些版本将在保证的时间内,通常是三年内得到安全和数据丢失的修复。

    团队组织

    Django 项目的组织
    Django 项目由一群追求三个目标的志愿者管理:

    推动 Django Web 框架的开发,
    培育 Django 相关软件的生态系统,
    根据Django 行为准则中描述的价值观领导 Django 社区 。
    Django 项目不是法律实体。在Django的软件基金会,一个非营利性组织,处理与Django的项目财务和法律问题。除此之外,Django 软件基金会让 Django 项目管理 Django 框架、其生态系统和社区的开发。

    Django 源代码仓库

    Django 源代码库

    在将 Django 应用程序部署到实际生产环境中时,您几乎总是希望使用Django 的官方打包版本。

    但是,如果您想从即将发布的版本中尝试开发中的代码或为 Django 的开发做出贡献,则需要获取 Django 源代码存储库的克隆。

    安全政策

    Django 的安全策略

    Django 的开发团队致力于负责任地报告和披露与安全相关的问题。因此,我们采用并遵循了一系列符合这一理想的政策,旨在让我们能够及时向 Django 的官方发行版以及第三方发行版提供安全更新。

    邮件列表

    邮件列表

    Django 在 Google Groups 上有几个官方邮件列表,对任何人都开放。

    django-users

    如果你想问任何关于 Django 的安装、使用或调试的问题,这里是正确的地方。

    如果你是第一次向这个名单发送邮件,你的邮件必须先被接受,所以不要担心 你的邮件没有立即出现。

    django-users mailing archive
    django-users subscription email address
    django-users posting email
    

    二、设计哲学:

    概览

    设计理念

    本文档解释了 Django 开发人员在开发 Django 时使用的一些基本哲学, 它的目标是解释过去并指导未来

    松耦合

    Django 栈的基本目标是 低耦合高内聚。框架里的不同层(Layers)不应该知道对方的代码,除非它们确实需要。

    例如,模板系统不需要知道用户的 Web 请求,数据库层不需要了解如果显示数据,而视图并不关心程序员所使用的模板系统。

    尽管为了方便 Django 带有一个完整的堆栈,但堆栈的各个部分尽可能独立于另一个堆栈。

    更少的代码

    Django 应用的代码应该尽可能地精简,Django 应该充分利用 Python 的动态能力,比如自省机制(introspection)。

    快速开发

    在 21 世纪,Web 框架的核心一点是让 Web 开发中枯燥的事情处理得更加快速,Django 可以做到快速的 Web 开发。

    不要重复地造轮子 (DRY)

    每个独特的概念或数据片应该存在且只存在于一个地方。避免冗余,做好标准化。

    合理的框架应该从尽可能少的信息中推断出尽可能多的需求。

    明确优于隐式

    这是在 PEP 20 列出的核心 Python 原则,这意味着 Django 不应该使用太多的“魔术”。除非有一个很好的理由,否则不应该出现魔术。只有当魔术创造了巨大的便利,并且使用其他方式难以实现时,它才值得使用,而且它的实现方式并不会让试图学习如何使用该功能的开发人员感到困惑。

    一致性

    框架应在所有层级上保持一致。一致性适用于从低级(Python 的编码风格)到高级(使用 Django 的“经验”)的所有内容。

    三、文档:

    关于本文档

    书写格式

    当使用代词指代一个假设的人时,如 “a user with a session cookie”,应使用性别中性的代词(they/their/them)。而不是:

    he 或 she……使用 they。
    him 或 her... 使用 them。
    his 或 her……使用 their。
    his 或 hers... 使用 theirs。
    himself 或 herself... 使用 themselves。
    

    四、第三方发行:

    概览

    Django 的第三方发布包

    许多第三方分销商现在正在提供与他们的软件包管理系统集成的 Django 版本。这些可以使 Django 的用户更容易安装和升级,因为集成包括了自动安装 Django 需要的依赖关系(如数据库适配器)的功能。

    通常,这些包基于 Django 的最新稳定版本,因此如果您想使用 Django 的开发版本,则需要从我们的 Git 库中安装 安装开发版本。

    如果您正在使用 Linux 或 Unix 的安装版,比如 OpenSolaris,请与您的经销商联系,看看他们是否已经打包了 Django。如果您使用的是Linux发行版,并且不知道如何弄清一个包是否可用,那么现在是学习的好时机。Django Wiki 包含一个“第三方发行版”列表,以帮助您解决问题。

    五、Django 时间线:

    API 稳定性

    什么是“稳定”?
    在此处,稳定意味着:

    • 所有发布的 API (在文档中的一切 API )在不提供向后兼容的别名的情况下,都不会被移除或者重命名。

    • 如果文档中的 API 添加了新特性(这是极有可能的),新特性不会导致现有方法罢工或者修改方法的含义。也就是说,“稳定性”并不意味着“不变性”。

    • 假如因为某些原因,一个“稳定的” API 必须被移除或者被代替,它将会被弃用但仍然会被保留直到至少有两个新特性发布。当调用即将被弃用的方法时,会产生警告。

    • 有关 Django 是如何编写版本号以及一些功能是如何被弃用的详细信息,请看: 正式发行。

    • 如果一个 bug 或安全漏洞完全不可避免,我们才会直接打破这些 API 的向后兼容性而不走弃用过程。

    发行说明和升级说明

    大家开发时可以选择合适的发行版本升级。
    3.2 发行
    Django 3.2.10 release notes
    Django 3.2.9 版本发行说明
    Django 3.2.8 版本发行说明
    Django 3.2.7 版本发行说明
    Django 3.2.6 版本发行说明
    Django 3.2.5 版本发行说明
    Django 3.2.4 版本发行说明
    Django 3.2.3 版本发行说明
    Django 3.2.2 版本发行说明
    Django 3.2.1 版本发行说明
    Django 3.2 版本发行说明
    3.1 发行
    Django 3.1.14 release notes
    Django 3.1.13 版本发行说明
    Django 3.1.12 版本发行说明
    Django 3.1.11 版本发行说明
    Django 3.1.10 版本发行说明
    Django 3.1.9 版本发行说明
    Django 3.1.8 版本发行说明
    Django 3.1.7 版本发行说明
    Django 3.1.6 版本发行说明
    Django 3.1.5 版本发行说明
    Django 3.1.4 版本发行说明
    Django 3.1.3 版本发行说明
    Django 3.1.2 版本发行说明
    Django 3.1.1 版本发行说明
    Django 3.1 版本发行说明
    3.0 发行
    Django 3.0.14 版本发行说明
    Django 3.0.13 版本发行说明
    Django 3.0.12 版本发行说明
    Django 3.0.11 版本发行说明
    Django 3.0.10 版本发行说明
    Django 3.0.9 版本发行说明
    Django 3.0.8 版本发行说明
    Django 3.0.7 版本发行说明
    Django 3.0.6 版本发行说明
    Django 3.0.5 版本发行说明
    Django 3.0.4 版本发行说明
    Django 3.0.3 版本发行说明
    Django 3.0.2 版本发行说明
    Django 3.0.1 版本发行说明
    Django 3.0 版本发行说明

    过时时间表

    开发会看文档很关键,所以大家要看到版本,不要看到版本的文档,因为官方是会随时更新文档的。
    4.1

    有关这些更改的更多详细信息,请参阅Django 3.2 发行说明。

    将删除对分配不支持使用copy.deepcopy()类属性创建深层副本的对象的支持 TestCase.setUpTestData()。
    BaseCommand.requires_system_checks 不支持布尔值。
    的whitelist参数和domain_whitelist属性 django.core.validators.EmailValidator将被删除。
    该default_app_config模块变量将被删除。
    TransactionTestCase.assertQuerysetEqual()repr()与字符串值相比,将不再自动调用查询集。
    django.core.cache.backends.memcached.MemcachedCache 将被移除。
    django.contrib.messages.storage.cookie.CookieStorage将删除对 Django 3.2 之前使用的消息格式的支持 。
    4.0

    有关这些更改的更多详细信息,请参阅Django 3.0 发行说明。

    django.utils.http.urlquote(), urlquote_plus(), urlunquote(), 和 urlunquote_plus()将被删除。
    django.utils.encoding.force_text()并且smart_text()将被删除。
    django.utils.translation.ugettext()、ugettext_lazy()、 ugettext_noop()、ungettext()和ungettext_lazy()将被删除。
    django.views.i18n.set_language()将不再在request.session(key django.utils.translation.LANGUAGE_SESSION_KEY) 中设置用户语言 。
    alias=None将需要在django.db.models.Expression.get_group_by_cols()子类的签名中 。
    django.utils.text.unescape_entities() 将被移除。
    django.utils.http.is_safe_url() 将被移除。

    更多相关内容
  • Python+Vue+Django前后端分离项目实战

    万人学习 2020-02-12 09:38:05
    一、融汇贯通 本视频采用了前后端分离的开发模式,前端使用Vue.js+Element UI实现了Web页面的呈现,后端使用Python 的Django框架实现了数据访问的接口,前端通过Axios访问后端接口获得数据。在学习完本章节后,真正...
  • 系统初始界面;登陆界面设计 ;学生信息录入;学生信息修改;学生信息查询;学生成绩录入;修改学生成绩;学生成绩查询 ;用户管理 该项目用PyCharm 可直接打开,数据库内嵌,可直接用
  • Django书籍 DjangoBook2.0中文版、精通DjangoDjango_中文教程等。 DjangoBook2.0中文版、精通DjangoDjango_中文教程 、Django Web开发指南、Django初探、Django基础和MVT架构 精通Django DjangoBook2. Django...
  • 本系统运用Django框架搭建了一个全新的图书管理系统,详细的介绍了Django的开发流程以及知识总结。
  • 基于Django的网上商城

    热门讨论 2018-03-01 16:45:21
    内有说明文档,完整的设计报告,数据库代码及程序代码都可以运行
  • 使用Python编程语言 Django MySQL数据库开发的web版学生管理系统,里面附带环境搭建的详细过程和开发过程中遇到的一些bug的讲解
  • Django入门书籍(the Django book)

    热门讨论 2012-03-29 10:20:28
    学习django很好的入门书籍,详细介绍了django的mvc 模式等。是python用来做web开发的主流框架。 作为一个鼓励快速开发,并遵循MVC设计的框架,django现在十分流行。推荐学习了python的朋友都去看看django框架。 设计...
  • Django学习笔记一初识Django

    万次阅读 2022-04-02 16:39:12
    Django学习笔记,入门Django框架

    1 Django简介

    1.1 基本介绍

    Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。开发者使用Django,只要很少的代码,就可以轻松完成一个网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 。Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。

    MVC 优势:

    • 低耦合
    • 开发快捷
    • 部署方便
    • 可重用性高
    • 维护成本低

    Python 加 Django 是快速开发、设计、部署网站的最佳组合。

    1.2 开发框架模型

    1.2.1 简介

    目前的开发框架模型可以按是否前后端分离来划分。其中各自特点如下:

    前后端不分离特点:

    • 后端需控制数据的展示
    • 前后端不分家,耦合严重
    • 返回的是HTML页面,适应性、拓展性差
      • 只能用于浏览器,其它终端不匹配

    前后端分离的特点:

    • 当前主流
    • 后端只对数据进行处理,只提供数据
    • 前端效率、页面好不好看,全由前端负责,前后端完全独立
    • 解耦合
    • 前后端同时开发,缩小业务上线周期
    • 绝大多数情况下,前端发送json格式的参数,后端同样以json格式的数据返回
      • 适应性、拓展性好
      • 适合多终端运行同一套接口(PC、APP、小程序等)

    在本文中,对前后端不分离的开发框架模型这里不作叙述,这里主要介绍前后端分离的MVC模型和MVT模型。

    1.2.2 MVC模型

    • 体现:Java常用MVC模式,比如SpringMVC。
    • MVC各部分的解释
      • M/Model(模型):主要封装对数据层的操作,对数据库的数据进行增删改查操作。
      • V/View(视图):用于封装结果的,然后生成用于展示html。
      • C/Controller(控制器):用于接收请求,然后处理业务逻辑,并返回结果。它处于Model和View之间,与两者交互。
    • 图解
      在这里插入图片描述

    1.2.3 MVT模型

    • 体现:Python中的Django框架就是MVT

    • MVT各部分的解释

      • M/Model(模型):与MVC的M功能相同,主要封装对数据层的操作,对数据库的数据进行增删改查操作。
      • V/View(视图):与MVC的C功能相同,接收请求,逻辑处理,返回结果。
      • T/Template(模板):和MVC中的V功能相同,负责封装和生成要返回的html。
    • 图解

      MVT模型

    2 Django安装

    如果你还未安装Python环境需要先下载Python安装包。注意:目前的 Django 1.6.x 以上版本已经完全兼容 Python 3.x。

    使用pip3 install Django==版本号 -i https://pypi.tuna.tsinghua.edu.cn/simple即可安装Django,注意使用镜像源下载,不然下载速度会很慢。

    检查是否安装成功:

    image-20220305175927603

    3 Django项目框架—创建第一个项目

    3.1 Django管理工具

    安装好Django之后,我们现在就有了可用的管理工具django-admin,这个其实就是一个py文件,代码如下:

    from django.core import management
     
    if __name__ == "__main__":
        management.execute_from_command_line()
    

    django-admin.py调用django.core.management来执行命令,这个函数会根据命令行参数解析出命令的名称,根据命令的名称来调用相应的Command执行命令。

    3.2 创建第一个项目

    使用django-admin来创建HelloWorld项目:

    django-admin startproject HelloWorld
    

    创建完成后,我们可以查看HelloWorld的目录结构如下:

    image-20220305191934585目录说明:

    • HelloWorld: 项目的容器。
    • manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
    • HelloWorld/init.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
    • HelloWorld/asgi.py: 一个 ASGI 兼容的 Web 服务器的入口,以便运行你的项目。
    • HelloWorld/settings.py: 该 Django 项目的设置/配置。
    • HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
    • HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。

    我们进入HelloWorld目录后输入以下命令启动服务器:

    python3 manage.py runserver 0.0.0.0:8000
    

    其中0.0.0.0是为了让其他电脑能连接到开发服务器,8000 为端口号。如果不说明,那么端口号默认为 8000,但建议指明端口号。

    在浏览器输入我们的ip地址(如果是云服务器,则输入公网地址,如果是本机,则可以输入本机地址:127.0.0.1)。这里特别说明,若是云服务器,我们必须在控制台开放8000端口号和80端口号,要不然访问不了。如果没有将IP地址添加到ALLOWED_HOSTS,则会出现如图错误:

    我们需要将IP地址添加到settings.py中的ALLOWED_HOSTS中。再次访问出现如下界面,此为Django的默认界面:

    3.3 视图和URL配置

    在先前创建的HelloWorld目录下的HelloWorld目录新建一个views.py,并输入代码:

    from django.http import HttpResponse
     
    def hello(request):
        return HttpResponse("Hello world ! ")
    

    接着,绑定 URL 与视图函数。打开 urls.py 文件,删除原来代码,将以下代码复制粘贴到 urls.py 文件中:

    from django.urls import path
     
    from .views import hello
     
    urlpatterns = [
        path('', hello),
    ]
    

    完成后,启动 Django 开发服务器,并在浏览器访问打开浏览器并访问:

    我们可以修改path,例如改为path('/hello', hello),那么url即为:http://127.0.0.1/hello。这个path函数可以接收四个参数,分别是两个必选参数:routeview和两个可选参数:kwargsname。语法格式如下:

    path(route, view, kwargs=None, name=None)

    • route: 字符串,表示 URL 规则,与之匹配的 URL 会执行对应的第二个参数 view。
    • view: 用于执行与正则表达式匹配的 URL 请求。
    • kwargs: 视图使用的字典类型的参数。
    • name: 用来反向获取 URL。

    注意:项目中如果代码有改动,服务器会自动监测代码的改动并自动重新载入,所以如果你已经启动了服务器则不需手动重启。

    展开全文
  • Django项目启动

    千次阅读 2022-03-25 20:16:00
    文章目录Django项目启动 -- 潘登同学的后端笔记快速启动创建子应用Django介绍MVC模式MTV模式ORM映射Django请求Django配置文件配置详解 快速启动 virtulaenv django_env pip install django django-admin ...

    Django项目启动 – 潘登同学的后端笔记

    快速启动

    virtulaenv django_env
    pip install django
    django-admin startproject MyFirstDjango
    cd MyFirstDjango
    python manage.py runserver
    

    目录结构

    MyFirstDjango/
        manage.py        # 启动文件
        MyFirstDjango/
            __init__.py  # 初始化文件
            settings.py  # 数据库配置
            urls.py      # router控制
            wsgi.py      # 项目部署文件
    

    创建子应用

    当然可以在原MyFirstDjango下写,但是有时候想创建子应用,与MyFirstDjango应用有一些文件的隔离

    创建一个叫myapp01的子应用

    python  manage.py  startapp  myapp01
    

    Django介绍

    MVC模式

    ​ MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

    • M: 管理应用程序的状态(通常存储到数据库中),并约束改变状态的行为(或者叫做“业务规则”)。

    • V: 负责把数据格式化后呈现给用户。

    • C: 接受外部用户的操作,根据操作访问模型获取数据,并调用“视图”显示这些数据。控制器是将“模型”和“视图”隔离,并成为二者之间的联系纽带。

    在这里插入图片描述

    MTV模式

    ​ Django也是一个MVC框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式:

    • M: 代表模型(Model),即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。

    • T: 代表模板(Template),即表现层。 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。

    • V: 代表视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。

      在这里插入图片描述

    ORM映射

    ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。

    在这里插入图片描述

    ORM 有下面这些优点

    • 数据模型都在一个地方定义,更容易更新和维护,也利于重用代码。
    • ORM 有现成的工具,很多功能都可以自动完成,比如数据消毒、预处理、事务等等。
    • 它迫使你使用 MVC 架构,ORM 就是天然的 Model,最终使代码更清晰。
    • 基于 ORM 的业务代码比较简单,代码量少,语义性好,容易理解。
    • 你不必编写性能不佳的 SQL。

    ORM 也有很突出的缺点

    • ORM 库不是轻量级工具,
    • 对于复杂的查询,ORM 要么是无法表达,要么是性能不如原生的 SQL。
    • ORM 抽象掉了数据库层,开发者无法了解底层的数据库操作,也无法定制一些特殊的 SQL。

    Django请求

    在这里插入图片描述

    myapp01\view.py中设置

    from django.shortcuts import render,HttpResponse
    
    # Create your views here.
    def first_test(request):
        print('第一个Django项目views')
        return HttpResponse('Django项目第一次请求成功')
    
    def first_html(request):
        html = '''
           <html>
              <body>
                 <form method="post">
                  用户名:<input name = "username" type="text"></input></br>
                  密码:<input name = "password" type = "password"></input></br>
                  <input type="submit" value="登录"></input>
                 </form>
              </body>
           </html>
           '''
        return HttpResponse(html)
    

    urls.py配置

    from myapp01 import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('test/',views.first_test),
        path('login/',views.first_html),
    ]
    

    启动项目,并在浏览器中打开,127.0.01:8000/test/127.0.01:8000/login/

    Django配置文件

    django项目创建后,在主应用中,会有一个settings.py文件,这个就是该项目的配置文件

    • settings文件包含Django安装的所有配置
    • settings文件是一个包含模块级变量的python模块,所以该模块本身必须符合python规则,并且可以使用python的语法
    • settings中的所有配置项的key必须全部大写
    • settings中每一个配置项都有默认值,默认配置内容在django/conf/global_settings.py中可以查看到,项目中不需要导入该模块,django框架会自动获取
    • settings中可以添加自定义的配置项

    配置详解

    import os
    """
        当前文件所在文件夹的上一级目录的绝对路径
        切记2个 os.path.dirname
    """
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    """
        用于加密session,一个随机的字符串
        这样生成:
        from django.core.management import utils
        utils.get_random_secret_key()
    """
    SECRET_KEY = '=*f&bx760nyar7@8lb8!w$9h(3ea6p3apl$iua!td1q%-u5r4='
    
    # 调试模式,可以看到错误的所有相信信息,部署时一定要修改为False
    DEBUG = True
    
    """
        允许访问的域名设置
        开发环境不用理会
        运行环境,配置 DEBUG = False后,
        如果允许所有域名访问,则设置 ALLOW_HOSTS = ['*']
        如果指定某些域名可以访问,则设置 ALLOW_HOSTS = ['*.baidu.com']
    """
    ALLOWED_HOSTS = []
    
    
    """
        应用的配置,
        如:'polls.apps.PollsConfig'
        如果没有 PollsConfig ,那么可以配置为  'polls'
    """
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles', # 只有 DEBUG = Ture 才有效
        
        'myapp01'  # 子应用必须配置,否则不起作用
    ]
    
    """
        中间层配置
        自己编写的 中间层 需要配置在最后
        譬如:
        mymidlle.md.TestMiddleware
    """
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    
    ]
    
    # 配置基础的urls
    ROOT_URLCONF = 'firstdjangopy.urls'
    
    # 配置模板
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')]
            ,
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
    # 服务器部署的WSGI配置
    WSGI_APPLICATION = 'firstdjango.wsgi.application'
    
    
    """
        数据库配置
        mysql在python3的使用,需要在 __init__.py 中加入以下代码:
        import pymysql
    
        pymysql.install_as_MySQLdb()
    """
    # DATABASES = {
    #     'default': {
    #         'ENGINE': 'django.db.backends.sqlite3',
    #         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    #     }
    # }
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'django_test1',
            'USER': 'root',
            'PASSWORD': '123456',
            'HOST': '127.0.0.1',
            'PORT': '3306',
        }
    }
    
    
    """
        用户密码验证
    """
    AUTH_PASSWORD_VALIDATORS = [
        {
            'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
        },
    ]
    
    
    # 语言选择 , zh-Hans 为中文
    LANGUAGE_CODE = 'en-us'
    
    # 时区 Asia/Shanghai 是中国时区
    TIME_ZONE = 'UTC'
    
    # 国际化
    USE_I18N = True
    
    # 本地化
    USE_L10N = True
    
    # 使用时区,配套TIME_ZONE使用,必须设置为 False
    USE_TZ = False
    
    """
        静态文件的路径,默认是 static
        如果在各自项目的static目录以外,还有目录存放静态文件,需要添加如下属性:
        STATICFILES_DIRS = (
            os.path.join(BASE_DIR, "common_static1"),
            '/var/www/static/',
        )
    """
    STATIC_URL = '/static/'
    
    展开全文
  • Mastering Django Core.pdf

    2016-12-31 10:34:30
    Delivers absolutely everything you will ever need to know to become a master Django programmer About This Book * Gain a complete understanding of Django-the most popular, Python-based web framework in...
  • Python开发-Django开发进程

    千次阅读 2021-11-29 14:41:51
    什么是Django 配置Django 的配置文件包含 Django 应用的所有配置项。本文档介绍配置是如何生效的,以及哪些设置项是可配置的。

    开发进程

    今天来学习下众多的组件及工具,来帮助你开发和测试 Django 应用:

    一、设置:

    概览

    什么是Django 配置

    Django 的配置文件包含 Django 应用的所有配置项。本文档介绍配置是如何生效的,以及哪些设置项是可配置的。

    基础知识

    配置文件只是一个使用模块级变量的一个 Python 模块。

    一组配置例子代码:

    ALLOWED_HOSTS = ['www.example.com']
    DEBUG = False
    DEFAULT_FROM_EMAIL = 'webmaster@example.com'
    

    因为配置文件是一个 Python 模块,所以要注意以下几项:

    不能有 Python 语法错误

    可以用 Python 语法实现动态配置,例如:

    MY_SETTING = [str(i) for i in range(30)]
    

    可以从其他配置文件中引入变量

    指定配置文件

    DJANGO_SETTINGS_MODULE
    

    当你使用 Django 的时候,你必须告诉它你正在使用哪些设置。通过使用环境变量 DJANGO_SETTINGS_MODULE 来实现。

    DJANGO_SETTINGS_MODULE 的值是一个符合 Python 语法的路径,例如 mysite.settings。要注意配置模块应位于 Python 的 import 搜索路径 中。

    django-admin 工具

    使用 django-admin 时,你可以一次性设定环境变量,也可以在运行此工具时,显式地传入配置模块。

    例子(Unix Bash shell):

    export DJANGO_SETTINGS_MODULE=mysite.settings
    django-admin runserver
    

    例子(Windows shell):

    set DJANGO_SETTINGS_MODULE=mysite.settings
    django-admin runserver
    

    使用 --settings 命令行参数指定配置模块路径:

    django-admin runserver --settings=mysite.settings
    

    服务器端 (mode_wsgi)
    在服务器环境下,要通知WSGI应用当前使用的是哪个配置文件,用到 os.environ:

    import os
    os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
    

    完整的设置列表

    核心配置

    下面是 Django 核心中可用的配置及其默认值的列表。下面列出了 contrib 应用提供的设置,后面是核心配置的专题索引。

    ABSOLUTE_URL_OVERRIDES

    默认: {} (空字典)

    将 “app_label.model_name” 字符串映射到接受模型对象并返回其 URL 的函数的字典。这是一种在每个预安装基础上插入或覆盖 get_absolute_url() 方法的方式。

    例如:

    ABSOLUTE_URL_OVERRIDES = {
        'blogs.weblog': lambda o: "/blogs/%s/" % o.slug,
        'news.story': lambda o: "/stories/%s/%s/" % (o.pub_year, o.slug),
    }
    

    ADMINS

    默认: [] (空列表)

    所有收到代码错误通知的人的列表。当 DEBUG=False 和 AdminEmailHandler 中设置了 LOGGING 时(默认情况下是这样做的),Django 会将请求/响应周期中出现的异常的详细信息通过邮件发送给这些人。

    列表中的每个项目应该是一个元组 (全名, 电子邮件地址)。

    例如:

    [('John', 'john@example.com'), ('Mary', 'mary@example.com')]
    

    二、应用程序:

    概览

    Django 包含一个已安装应用程序的注册表,能够存储配置和内省。它还维护着一个可用的 模型 列表。

    这个注册表叫做 app,它在 django.app 中可用:

    >>> from django.apps import apps
    >>> apps.get_app_config('admin').verbose_name
    'Administration'
    

    项目和应用程序

    术语 项目 描述了一个 Django 网络应用。项目的 Python 包主要是由一个配置模块定义的,但它通常包含其他东西。例如,当你运行 django-admin startproject mysite 时,你会得到一个 mysite 项目目录,其中包含一个 mysite 的 Python 包,其中有 settings.py、urls.py、asgi.py 和 wsgi.py。该项目包经常被扩展到包括像辅助工具、CSS 和模板这样的东西,这些东西并不与特定的应用程序相关。

    一个 项目的根目录 (包含 manage.py 文件的目录)通常是项目中所有未单独安装的应用程序的容器。

    术语 应用程序 指的是提供了一些功能的 Python 包。应用程序 可在多个项目中重用。

    应用程序包括模型,视图,模板,模板标签,静态文件,URL,中间件等的一些组合。它们通常使用 INSTALLED_APPS 选项加入到项目中,也可以使用其他机制,如 URLconf, MIDDLEWARE 配置或模板继承。

    重要的是要理解 Django 应用程序是一组与框架各部分交互的代码。并不存在 Application 对象这种东西。但是,在一些地方,Django 需要与已安装的应用进行交互,主要是为了配置,也是为了自省。所以应用注册表为每个安装的应用在一个 AppConfig 实例中维护元数据。

    一个项目包可以自由的作为一个应用程序并包含一些模型等(前提是,需要把它加入 INSTALLED_APPS)。

    配置应用程序

    要设置一个应用程序,在应用程序中创建一个 apps.py 模块,然后在那里定义一个 AppConfig 的子类。

    当 INSTALLED_APPS 中包含一个应用程序模块的点分隔路径时,默认情况下,如果 Django 在 apps.py 子模块中找到一个 AppConfig 子类,它就会将该配置用于应用程序。这个行为可以通过设置 AppConfig.default 为 False 来禁止。

    如果 apps.py 模块包含多个 AppConfig 子类,Django 会寻找一个 AppConfig.default 为 True 的子类。

    如果没有找到 AppConfig 子类,将使用 AppConfig 基类。

    另外,INSTALLED_APPS 也可以包含一个配置类的点分隔路径,以明确地指定它:

    INSTALLED_APPS = [
        ...
        'polls.apps.PollsAppConfig',
        ...
    ]
    

    对于应用程序作者
    如果你正在创建一个名为 “Rock ’n’ roll” 的可插拔应用,那么这边将告诉你将如何为管理后台提供一个合适的名称:

    # rock_n_roll/apps.py
    
    from django.apps import AppConfig
    
    class RockNRollConfig(AppConfig):
        name = 'rock_n_roll'
        verbose_name = "Rock ’n’ roll"
    

    当 INSTALLED_APPS 包含 ‘rock_n_roll’ 时,RockNRollConfig 将自动加载。如果需要防止这种情况发生,可以在类定义中把 default 设置为 False。

    你可以提供多个 AppConfig 子类来实现不同的行为。要告诉 Django 默认使用哪一个,可以在定义中把 default 设置为 True。如果你的用户想选择一个非默认的配置,他们必须在他们的 INSTALLED_APPS 配置中用这个类的点分隔路径替换 ‘rock_n_roll’。

    AppConfig.name 属性告诉 Django 这个配置适用于哪个应用。你可以定义在 AppConfig API 参考中描述任何其他属性。

    AppConfig 子类可以在任何地方定义。apps.py 惯例只是允许 Django 在 INSTALLED_APPS 包含一个应用程序模块的路径而不是一个配置类的路径时自动加载它们。

    对于应用程序使用者

    项目中直接使用 “Rock ’n’ roll”,其名字会是 anthology,但是你可能期望显示 “Jazz Manouche”,这需要你提供自定义配置:

    # anthology/apps.py
    
    from rock_n_roll.apps import RockNRollConfig
    
    class JazzManoucheConfig(RockNRollConfig):
        verbose_name = "Jazz Manouche"
    
    # anthology/settings.py
    
    INSTALLED_APPS = [
        'anthology.apps.JazzManoucheConfig',
        # ...
    ]
    

    三、异常:

    概览

    Django 异常

    Django 会引发一些自己的异常以及标准的 Python 异常。

    Django 核心异常

    Django 核心异常类定义在 django.core.exceptions 中。

    AppRegistryNotReady

    exception AppRegistryNotReady[源代码]
    当在初始化 ORM 的 应用加载过程 完成之前,试图使用模型时,就会引发这个异常。

    ObjectDoesNotExist

    exception ObjectDoesNotExist[源代码]
    Model.DoesNotExist 异常的基类。一个对 ObjectDoesNotExist 的 try/except 将捕获对所有模型的 DoesNotExist 异常。

    EmptyResultSet

    exception EmptyResultSet[源代码]
    如果一个查询不返回任何结果,那么 EmptyResultSet 可能会在生成查询的过程中被触发。大多数 Django 项目不会遇到这个异常,但它可能对实现自定义查找和表达式很有用。

    FieldDoesNotExist

    exception FieldDoesNotExist[源代码]
    当请求的字段在模型或模型的父类上不存在时,模型的 _meta.get_field() 方法会引发 FieldDoesNotExist 异常。

    MultipleObjectsReturned

    exception MultipleObjectsReturned[源代码]
    Model.MultipleObjectsReturned 异常的基类。一个对 MultipleObjectsReturned 的 try/except 将捕获对所有模型的 MultipleObjectsReturned 异常。

    四、django-admin.py 和 manage.py:

    概览

    django-admin 和 manage.py

    django admin 是 Django 用于管理任务的命令行实用程序。这份文件概述了它所能做的一切。

    此外,manage.py 会在每个 Django 项目中自动创建。它做的事情和 django-admin 一样,但也设置了 DJANGO_SETTINGS_MODULE 环境变量,使其指向你的项目的 settings.py 文件。

    如果你通过 pip 安装 Django,django-admin 脚本应该在你的系统路径中。如果它不在你的系统路径中,请确保你的虚拟环境已经被激活。

    一般来说,当你在一个 Django 项目中工作时,使用 manage.py 比使用 django-admin 更容易。如果你需要在多个 Django 配置文件之间切换,可以使用 django-admin 与 DJANGO_SETTINGS_MODULE 或 --settings 命令行选项。

    为了保持一致,本文中的命令行例子都使用了 django-admin,但任何例子都可以使用 manage.py 或 python -m django。

    用法

    $ django-admin <command> [options]
    $ manage.py <command> [options]
    $ python -m django <command> [options]
    

    command 应是本文件所列的命令之一。options 是可选的,应该是 0 个或更多可用于指定命令的选项。

    获得运行时帮助
    django-admin help

    • 运行 django-admin help 来显示使用信息和每个应用程序提供的命令列表。

    • 运行 django-admin help --commands 来显示所有可用命令的列表。

    • 运行 django-admin help 来显示命令的描述和可用选项的列表。

    应用名称

    许多命令都需要一个“应用名称”的列表。一个“应用名称”是包含你模型的包的基名。例如,如果你的 INSTALLED_APPS 包含字符串 ‘mysite.blog’,则应用名称为 blog。

    确定版本

    django-admin version
    

    运行 django-admin version 来显示当前的 Django 版本。

    输出遵循 PEP 440 中描述的架构:

    1.4.dev17026
    1.4a1
    1.4
    

    显示 debug 输出

    使用 --verbosity,如果支持的话,可以指定 django-admin 打印到控制台的通知和调试信息的数量。

    添加自定义命令

    编写自定义 django-admin 命令

    应用程序可以用 manage.py 注册自己的动作。例如,你可能想为你正在分发的 Django 应用添加一个 manage.py 动作。在本文档中,我们将为 教程 中的 polls 应用程序构建一个自定义的 closepoll 命令。

    要做到这一点,在应用程序中添加一个 management/commands 目录。Django 会给目录下的每个 Python 模块注册一个 manage.py 命令,这个命令的名字不以下划线开头。

    例如:

    polls/
        __init__.py
        models.py
        management/
            __init__.py
            commands/
                __init__.py
                _private.py
                closepoll.py
        tests.py
        views.py
    

    在这个例子中,closepoll 命令将提供给任何在 INSTALLED_APPS 中包含 polls 应用程序的项目。

    _private.py 模块将不会作为管理命令使用。

    closepoll.py 模块只有一个要求——必须定义 Command 类,该类继承自 BaseCommand 或其 子类。

    五、测试:

    介绍

    Django 中的测试

    对现在的 Web 开发者来说,自动化测试是一个非常有用的发现 bug 的工具。你可以使用一套测试—— 测试套件 ——去解决,避免一堆的问题:

    当你编写新代码时,你可以利用测试确保代码按照期望的方式运行。
    当你重构或修改旧代码,你可以利用测试来确保你的修改不会使应用运行出错。
    测试一个 Web 应用是一项复杂的工作,因为 Web 应用包含了多层业务逻辑——从 HTTP 层响应请求,到表单有效性检测和处理,再到模板渲染。利用 Django 的测试执行框架和配套的工具,你可以模拟其你去,插入测试数据,检查应用的输出,以此检验你的代码是否按照期望运行。

    在 Django 中编写测试的首选方式是使用 Python 标准库中内置的 unittest 模块。这一点在 编写并运行测试 文档中有详细介绍。

    你也可以使用 另一个 Python 测试框架;Django 提供了用于这种集成的 API 和工具。这在 进阶测试主题 的 使用不同的测试框架 章节中有介绍。

    编写并运行测试
    测试工具
    进阶测试主题
    

    书写并运行测试

    编写测试
    Django 的单元测试采用 Python 的标准模块: unittest。该模块以类的形式定义测试。

    下面是一个例子,它是 django.test.TestCase 的子类,同时父类也是 unittest.TestCase 的子类,在事务内部运行每个测试以提供隔离:

    from django.test import TestCase
    from myapp.models import Animal
    
    class AnimalTestCase(TestCase):
        def setUp(self):
            Animal.objects.create(name="lion", sound="roar")
            Animal.objects.create(name="cat", sound="meow")
    
        def test_animals_can_speak(self):
            """Animals that can speak are correctly identified"""
            lion = Animal.objects.get(name="lion")
            cat = Animal.objects.get(name="cat")
            self.assertEqual(lion.speak(), 'The lion says "roar"')
            self.assertEqual(cat.speak(), 'The cat says "meow"')
    

    当你 运行你的测试 时,测试工具的默认行为是在任何名字以 test 开头的文件中找到所有的测试用例(也就是 unittest.TestCase 的子类),从这些测试用例中自动构建一个测试套件,然后运行该套件。

    包含的测试工具

    测试客户端

    测试客户端是一个 Python 类,它充当一个虚拟的 Web 浏览器,允许你测试视图并以编程方式与 Django 驱动的应用程序交互。

    你可以使用测试客户端执行以下操作:

    模拟 URL 上的 GET 和 POST 请求并观察响应——从低级 HTTP(结果头和状态码)到页面内容,应有尽有。
    查看重定向链(如果有的话),并检查每个步骤的 URL 和状态码。
    测试给定的请求是否由给定的包含某些值以及模板上下文的 Django 模板渲染。
    请注意,测试客户端并不是要取代 Selenium 或其他“浏览器内”框架。Django 的测试客户端有不同的侧重点。简而言之:

    使用 Django 的测试客户端来确定要渲染的模板正确,并且模板已传递了正确的上下文数据。
    使用如 Selenium 之类的浏览器内框架来测试 渲染后的 HTML 和 Web 页面 行为,即 JavaScript 功能。Django 也为这些框架提供了特殊的支持,详情参见 LiveServerTestCase。
    一个全面的测试套件应该使用这两种测试类型的组合。

    概述和一个简单的例子
    要使用测试客户端,请实例化 django.test.Client 并检索 Web 页面:

    >>> from django.test import Client
    >>> c = Client()
    >>> response = c.post('/login/', {'username': 'john', 'password': 'smith'})
    >>> response.status_code
    200
    >>> response = c.get('/customer/details/')
    >>> response.content
    b'<!DOCTYPE html...'
    

    高级主题

    进阶测试主题:请求工厂
    class RequestFactory

    RequestFactory 与测试客户端共享相同的 API。 但是,RequestFactory 不能像浏览器那样运行,而是提供一种生成请求实例的方法,该实例可用作任何视图的第一个参数。 这意味着您可以像测试任何其他功能一样测试视图函数——就像一个黑匣子一样,具有确切已知的输入,可以测试特定的输出。

    RequestFactory 的 API 是测试客户端 API 的一个稍加限制的子集。

    它只能访问 HTTP 的 get()、post()、put()、delete()、head()、options() 和 trace() 方法。
    这些方法接受所有相同的参数,除了 follow。因为这只是一个产生请求的工厂,所以由你来处理响应。
    它不支持中间件。如果需要视图正常运行,会话和认证属性必须由测试本身提供。

    下面是一个使用请求工厂的单元测试:

    from django.contrib.auth.models import AnonymousUser, User
    from django.test import RequestFactory, TestCase
    
    from .views import MyView, my_view
    
    class SimpleTest(TestCase):
        def setUp(self):
            # Every test needs access to the request factory.
            self.factory = RequestFactory()
            self.user = User.objects.create_user(
                username='jacob', email='jacob@…', password='top_secret')
    
        def test_details(self):
            # Create an instance of a GET request.
            request = self.factory.get('/customer/details')
    
            # Recall that middleware are not supported. You can simulate a
            # logged-in user by setting request.user manually.
            request.user = self.user
    
            # Or you can simulate an anonymous user by setting request.user to
            # an AnonymousUser instance.
            request.user = AnonymousUser()
    
            # Test my_view() as if it were deployed at /customer/details
            response = my_view(request)
            # Use this syntax for class-based views.
            response = MyView.as_view()(request)
            self.assertEqual(response.status_code, 200)
    

    六、部署:

    概述

    部署 Django

    Django 中简化 Web 开发的快捷函数俯拾皆是,但是如果不能轻松部署网站的话,所有的工具都徒劳无益。Django 从最初就把方便部署当作一个主要目标。

    部署你的Django应用程序有很多选择,可以基于你的架构或者特定的业务需要,但是这不在Django可以给出指导建议的范围内。

    Django是一个需要Web服务器来运行的Web框架。然而由于大多数Web服务器不是用Python编写,我们需要一个接口来实现沟通。

    Django现在支持两种接口:WSGI和ASGI。

    WSGI 服务器

    如何使用 WSGI 进行部署

    Django 的主要部署平台是 WSGI,它是 Web 服务器和 Web 应用的 Python 标准。

    Django 的管理命令 startproject 生成了一个最小化的默认 WSGI 配置,你可以按照自己项目的需要去调整这个配置,任何兼容 WSGI 的应用程序服务器都可以直接使用。

    Django 提供了下面这些 WSGI 服务的入门文档:

    如何使用 Gunicorn 托管 Django
    如何用 uWSGI 托管 Django
    如何使用 Apache 和 mod_wsgi 托管 Django
    Apache 利用 Django 的用户数据库进行验证

    ASGI 服务器

    如何使用 ASGI 来部署

    同 WSGI 一样,Django 也支持使用 ASGI 来部署,它是为了支持异步网络服务器和应用而新出现的 Python 标准。

    Django 的管理命令 startproject 生成了一个默认的 ASGI 配置,你可以按照自己项目的需要去调整这个配置,任何兼容 ASGI 的应用程序服务器都可以直接使用。

    Django 提供了下面这些 ASGI 服务的入门文档:

    如何使用 Daphne 托管 Django
    如何使用 Hypercorn 托管 Django。
    如何使用 Uvicorn 托管 Django
    

    部署静态文件

    在生产环境提供静态文件服务

    在生产环境部署静态文件的基础要点有两步:在静态文件变化时,运行 collectstatic,然后将已收集的静态文件目录配置(STATIC_ROOT)移至静态文件服务器并提供服务。 STATICFILES_STORAGE 配置可能会要求手动将文件移动到新位置,不过 Storage 类的 post_process 方法可能会处理它。

    像所有的部署任务一样,细节决定成败。每个生成环境的配置可能都有点不同个,所以,需要调整基础配置以满足你的需求。以下是常见模式,可能对你有所帮助。

    在同一服务器提供站点和静态文件服务

    如果你想在早已提供站点服务器服务器上同时提供静态文件服务,操作步骤类似这样:

    将代码推送至部署服务器。
    在服务器上运行 collectstatic,将所有的静态文件拷贝至 STATIC_ROOT。
    配置 Web 服务器,使其在 STATIC_URL 下为 STATIC_ROOT 目录下的文件提供静态文件服务。例如, 这里是如何以 Apache 配合 mod_wsgi 开始。
    你可能期望将该流程自动化,特别是在你有好几个 web 服务器的时候。

    专用服务器提供静态文件服务

    大多数大型 Django 站点使用一个独立的 Web 服务器——即,该服务器并未运行 Django,值提供静态文件服务。这种服务器一般运行一种不同的 Web 服务器——更快,更简单。常见选项如下:

    Nginx
    一个 Apache 的朴素版本
    如何配置这些服务器超出了本文范围;查阅这些服务器各自的文档获取介绍。

    由于静态文件服务器并不运行 Django,你需要将部署策略改成这样:

    当静态文件改变时,本地运行 collectstatic。
    将本地 STATIC_ROOT 推送到静态文件服务器提供服务的目录。 rsync 是一个常见选项,因为这种配置只会传输文件修改部分的数据流。

    使用 email 追踪代码错误

    发送错误

    当您运行着公开的网页时,你应该把设置中的 DEBUG 选项设为关闭。 这将使您的服务器运行得更快,并且还可以防止恶意用户在错误页面中看到应用的详细信息。

    然而,把配置 DEBUG 设置为 False, 这意味着你永远不会在你的网站上看到错误的细节,所有的人相应会看到你公开的错误页面。当你需要在部署的网页上追踪出现的错误,Django 可以通过设置去报告错误的细节。

    部署检查清单

    部署清单

    互联网是一个恶劣的环境。在部署你的 Django 项目之前,你应该将安全、性能和操作铭记于心,并花一些时间来检查你的配置。

    Django 包含了许多 安全特性。一些是内置的并且总保持激活状态,其他的则是可选的因为它们不总是恰当的,或者因为它们不便于之后的开发。举个例子,强制的 HTTPS 并不一定适合所有网站,它对于本地开发就是不切实际的。

    性能优化是另一项便利性权衡的主题。例如,缓存在生成环境很有用,但是对本地开发就作用不大。错误报告的需求也大不相同。

    以下清单包括以下配置:

    • 必须正确地设置 Django 以提供预期的安全级别;
    • 期望在每个环境中都是不同的;
    • 启用可选的安全功能;
    • 启用性能优化;
    • 提供错误报告功能。
    • 许多配置项是敏感的,需要被当做机密对待。如果要发布项目源码,常见操作是为开发开放合适的配置项,为生产环境配置私密设置模块。
    展开全文
  • django 3.0

    万次阅读 多人点赞 2020-03-23 08:41:08
    Django 3.0 本次关于django 3.0 的教程全部是基于 Windows 10 和 Python 3.8 的基础上。 建立虚拟环境 在CMD(命令提示符)中输入以下命令建立一个名为django的虚拟环境。 mkvirtualenv django 建立虚拟环境成功...
  • 43.Django权限系统auth模块详解

    万次阅读 多人点赞 2021-09-10 08:05:19
      这就想到了我们映射数据库时,Django自动创建的一些表(这也是之前进行数据库迁移时没有提到的那些表)!!! 0.初接触   如上图就是Django自带的auth系统对应的表,也就是存放了之前创建的超级用户信息的表...
  • 在本教程中,我们将了解 Django 项目和 Django 应用程序之间的区别,以及如何启动一个新的 Django 项目。 Django 是构建 Web 应用程序的首选 Python Web 框架。它是一个成熟、功能齐全、灵活且开源的框架,可让您...
  • Flask 与 Django 框架对比

    千次阅读 2022-03-03 15:48:51
    详细分析了两种 Python Web框架: Flask 与 Django。从开发难易度、应用架构、性能、可扩展性以及适用范围等方面进行了详细说明。
  • django-filter 过滤器专门解决这种查询的问题。 环境准备 使用pip安装django-filter,目前安装的版本v2.2.0 pip install django-filter 在setting.py添加django_filters到INSTALLED_APPS INSTALLED_APPS = [ ...
  • Django By Example 无水印pdf 0分

    千次下载 热门讨论 2016-01-10 16:13:58
    If you are a web developer who is completely new to or familiar with Django and wants to make the most of it, this book is for you. Some basic knowledge of Python, HTML, and JavaScript is recommended....
  • Django 3.2 开发web项目

    千次阅读 多人点赞 2021-10-22 11:07:23
    Django 3.2 开发web项目开发环境Django安装Django文档Django创建Django启动Django目录介绍Django创建自己的应用CODE IS ALL YOU NEED无数据库有数据库(含html页面的展示)源码链接吐槽一下 开发环境 系统:window ...
  • Django学习之Auth认证系统

    千次阅读 2021-08-12 14:07:01
    Django学习之Auth认证系统 继续打码学习Django,本次记录的是《Django Web应用开发实战》第10章的内容,主要内容为内置user实现用户管理。 项目创建&应用创建&项目配置 项目创建直接在pycharm中创建Django...
  • Django项目连接MongoDB的三种方法

    千次阅读 2021-09-16 08:53:37
    有三种方法连接Django到MongoDB数据库 1.PyMongo:PyMongo 是 MongoDB 与 Django 交互的标准驱动程序。这是在 Python 中使用 MongoDB 的官方和首选方式。 PyMongo 提供了执行所有数据库操作的功能,例如搜索、删除...
  • 直观对比django与DRF

    千次阅读 2021-09-22 16:58:36
    首先我们来看我从知乎上保存的有关django与DRF的流程图,思考两者之间的区别与联系! Django就是将数据库的东西通过ORM的映射取出来,通过view文件,按照template文件排出的模板渲染成HTML。当用户请求相应的...
  • 我的pycharm是社区版,由于社区版没有集成Django模块,所以不能直接创建,只能先创建工程,然后在通过pip的方式安装Django。 安装Django模块 我们进入pycharm,点击new project,创建一个名为Django的工程。 刚...
  • 开源web框架django知识总结(一)

    千次阅读 多人点赞 2021-08-26 18:43:33
    开源web框架django知识总结(一) django起源: 1.2005年发布,采用python语言编写的开源web框架 2.早期的时候django主要做新闻和内容管理的 3.重量级的python web框架,django配备了常用的大部分组件 组件: 包含...
  • Django 路由

    万次阅读 2020-09-08 11:51:09
    文章目录Django 路由Django1.1.x 版本Django 2.2.x 之后的版本正则路径中的分组正则路径中的无名分组urls.pyviews.py正则路径中的有名分组urls.pyviews.py正则路径中的有名分组路由分发(include)反向解析普通路径...
  • 基于docker部署nginx+uwsgi+django

    千次阅读 2021-08-24 09:51:57
    基于docker部署nginx+uwsgi+django(一)docker+uwsgi+django(二)docker+nginx+django(三)docker+nginx+uwsgi+django(五)结语 (一)docker+uwsgi+django (二)docker+nginx+django (三)docker+nginx+uwsgi...
  • Django部署uwsgi

    千次阅读 2022-04-08 08:13:56
    云服务器(Ubuntu),Django项目文件 知识补充 WSGI (Web Server Gateway Interface) Web服务器网关接口,是python应用程序或框架和web服务器之间的一种接口,被广泛使用。 在开发和测试环境中使用python manage.py ...
  • Python Web开发之Django基础入门(一)

    千次阅读 2022-06-02 16:56:43
    目录django概念Django简介Django MTV和MVC的区别MVCMTV创建简单的Django项目1.首先创建一个运行Django项目的虚拟环境(virtualenv)2. 创建django项目python manage.py startapp hallo_appsettings.py配置文件详细解读...
  • Python Django 强大的web mvc开发框架

    千次阅读 2019-11-25 23:57:54
    Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于...
  • Django 安装

    万次阅读 2020-09-08 10:29:23
    文章目录Django 安装一、Window 下安装 DjangoPython 安装(已安装的可跳过)Django 安装二、检查是否安装成功三、Linux 上安装 Djangoyum 安装方法安装 setuptoolspip 命令安装方法源码安装方法四、Mac 下安装下载...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 435,716
精华内容 174,286
关键字:

django