MTV模型 首先要知道一点, Django框架使用的并不是我们常见的MVC模型而是MTV模型, 提前了解这点对我们理解后面对各个模型的作用和框架的整体工作流程是非常有帮助的。...注意:此时引用路径中的要用配置文件中的别名 static,而不是目录 statics。...实际上我们需要明白的一点是, Django的模型和数据库间的交互并不是完全由Django内部的组件完成的, 而是依靠pymysql这些独立于Django之外,需要另外安装的模块来完成。...FILES 包含所有上传文件的类字典对象。FILES中的每个Key都是标签中name属性的值....:当采用客户端象 django 的服务器提交 post 请求时,会得到403,权限异常。
STATICFILES_DIRS = ( os.path.join(BASE_DIR,'static'), ) 2-6、配置模板文件目录(html文件),需要增加配置,然后在项目目录下新建相应的目录即可...Django的配置 一、Django路由系统 说明:Django中每一个请求的url必须有一个相应的函数来处理,当请求到达时会根据urls.py文件配置的规则从上往下匹配,匹配一条则不再往下匹配...2、修改项目目录下的urls.py文件,首先导入include方法(from django.conf.urls import include),然后配置路由分类规则,多个应用则重复这两步操作。...在Django中的用处: 1、用于判断用户是否已登录 2、根据不同的用户返回不同的内容 工作原理: 当客户端(浏览器)访问服务器时,服务器会为本次会话创建一个Seesion...html code {% else %} html code {% endif %} 4、模板继承:当多个页面需要使用同样的主题样式,只是局部内容不一样时
我们不需要面向数据库编程,而是通过定义模型类,通过对我们的模型类和对象的方法调用,从而完成了对数据库 CRUD 操作。...在Django所支持的所有数据库中,从 -2147483648 到 2147483647 范围内的值是合法的....参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false.参数auto_now_add表示当对象第一次被创建时自动设置当前时间...首先我们先查看下项目目录结构, 会发现在 goods 应用和 cart 应用的 migrations 目录为空, 当我们执行迁移命令时, 对比该目录的变化: ?...图10 查看数据库, 我们已发现对应的数据库表已经创建, 但是表明并不是我们和我们模型类类名一直, 数据库中的表的格式为: 应用名字_模型类类名小写. ?
我们并不是直接讲解 Django 框架, 而是通过项目驱动的方式, 一步步掌握 Django 框架的基本使用. 1 项目创建 我们的项目基于 Django 框架, 所以我们先创建一个 Django 项目...创建项目之前, 我们首先搭建我们的项目运行环境: 1.1 搭建开发环境 在开发过程中,当需要使用 python 的包时可以通过 pip 命令联网安装, 所有第三方的包都会被pip安装到Python3的site-packages...图3 项目结构中多出了名字为 cart 和 goods 两个目录, 两个目录内所包含的文件是一模一样的, 每个新创建的应用目录结构和 cart、goods是一样的....; views.py 在此编写视图相关代码; models.py 在此编写模型相关代码; migrations包,稍后讲解模型创建时讲解....我们不需要面向数据库编程,而是通过定义模型类,通过对我们的模型类和对象的方法调用,从而完成了对数据库 CRUD 操作。
(DEBUG=True)能对外提供静态文件,当DEBUG=False工作在生产模式时,Django不再对外提供静态文件, 需要是用collectstatic命令来收集静态文件并交由其他静态文件服务器来提供...,而是其他地址,访问Django时,可能出现Redis连接错误 解决方法: 修改redis的配置文件,添加特定ip地址。...当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据。...当没有为模型类定义管理器时, Django会为每一个模型类生成一个名为objects的管理器,它是models.Manager类的对象。...在工程中根目录下创建模板目录templates 在settings.py配置文件中修改TEMPLATES配置项的DIRS值 TEMPLATES
Django中: 1、设置模板目录 在工程中创建模板目录templates。...中: 1、pip install pymysql 2、setting里面的DATABASES里面进行数据库配置 3、首次启动时需要在项目同名的目录下__init__.py里面添加两句话 import pymysql...class Meta: db_table = "" 数据删除的时候,有一种逻辑删除:就是不是真正的删除,而是做一个删除的标记,比如说加一个字段,0表示删除,1表示没删除,然后展示的时候根据标记展示...表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误 TimeField 时间...AutoField的选项使用 unique 如果为True, 这个字段在表中必须有唯一值,默认值是False 外键 在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理
当没有设置default值是,BooleanField的值为None。...**注意:**在模型中使用FileField或ImageField时,需要执行以下几个步骤: l 在settings.py中定义MEDIA_ROOT为django设置存储上载文件的目录的完整路径(这些文件并未直接存储在数据库中...l 在模型中添加FileField或ImageField字段时,定义upload_to指定MEDIA_ROOT的路径用于上传文件的目录。...如果需要在尚未定义的模型上创建关系,则可以使用模型的名称,而不是模型对象本身。...SET_NULL:删除时把外键置为null,当null=True时才可以使用。 SET_DEFAULT:把外键置为默认值,必须要设置默认值时才可以使用。
如果该文件不存在,它会在第一次同步数据库时自动创建(见下文)。 当指定路径时,总是使用正斜杠,即使是在 Windows 下(例如:C:/homes/user/mysite/sqlite3.db) 。...Django 提供了个实用工具可以自动生成一个应用的基本目录架构,因此你可以专注于编写代码而不是去创建目录。 项目 ( Projects ) vs....你的应用可以存放在 Python path 中的任何位置。在本教材中,我们将通过你的 manage.py 文件创建我们的投票应用,以便它可以作为顶层模块导入,而不是作为 mysite 的子模块。...在你的 Python 的代码中会使用这个值,而你的数据库会将这个值作为表的列名。 你可以在初始化 Field 实例时使用第一个位置的可选参数来指定人类可读的名字。...We use 我们在这里使用 unicode() 是因为 Django 模型默认处理的是 Unicode 格式。当所有存储在数据库中的数据返回时都会转换为 Unicode 的格式。
如果 “Date published” 的值与你在第一部分教程时创建的 poll 的时间不符,这可能 意味着你忘记了将 TIME_ZONE 设置成正确的值了。...每个有 ForeignKey 的对象关联到其他对象都会得到这个链接。 当点击 “Add Another” 时,你将会获得一个 “Add poll” 表单的弹出窗口。...TEMPLATE_DIRS 中任何目录的子目录 admin 下。...当 Django 呈现 admin/base_site.html 时,根据模板语言生成最终的 HTML 页面。...请注意 Django 默认的管理网站中的任何模板都是可覆盖的。 要覆盖一个模板,只需要像刚才处理 base_site.html 一样 – 从默认的目录下复制到你的自定义目录下,并修改它。
Django 为我们提供了一种更简单的操作数据库的方式。 在 Django 中,模型(Model)是用来定义数据库结构的类。每个模型类通常对应数据库中的一个表,类的属性对应表中的列。...pip install pymysql 然后在 Django 项目的 __init__.py 文件(通常在与settings.py文件同级的目录下)中添加以下代码,以确保 Django 使用 PyMySQL...Django 应用的 models.py 文件中),并生成描述这些更改的迁移文件。...这些表的迁移文件已经包含在 Django框架中,当执行迁移时,Django会为这些默认应用程序创建必要的数据库表。 创建模型 在创建模型之前我们需要知道这个模型属于哪一个应用下的。...null 的值默认是 False。这里主要影响 MySQL 入库时的值。 blank=True: 允许为 null。默认 False。决定这个字段是否为空,比如登录时这里用户名是否为空。
激活:添加到Django配置文件中的MIDDLEWARE_CLASSES元组中 每个中间件组件是一个独立的Python类,可以定义下面方法中的一个或多个 _init _:无需任何参数,服务器响应第一个请求的时候调用一次...当Django在处理文件上传的时候,文件数据被保存在request.FILES FILES中的每个键为中的name 注意:FILES只有在请求的方法为...项中加入django.contrib.admin,Django就会自动搜索每个应用的admin模块并将其导入 ModelAdmin对象 ModelAdmin类是模型在Admin界面中的表示形式 定义:定义一个类...(BASE_DIR, 'templates')], 从Django安装的目录下(django/contrib/admin/templates)将模板页面的源文件admin/base_site.html拷贝到第一步建好的目录里...:当向page()传入一个无效的页码时抛出 PageNotAnInteger:当向page()传入一个不是整数的值时抛出 EmptyPage:当向page()提供一个有效值,但是那个页面上没有任何对象时抛出
共有下列额外的可选参数: Argument 描述 auto_now 当对象被保存时,自动将该字段的值设置为当前时间.通常用于表示 "last-modified...auto_now_add 当对象首次被创建时,自动将该字段的值设置为当前时间.通常用于表示对象创建时间. (仅仅在admin中有意义......MEDIA_ROOT 的哪个子目录保存上传文件.你的数据库中要保存的只是文件的路径(相对于 MEDIA_ROOT)....默认值是 False. 是否包括 path 下面的全部子目录. 这三个参数可以同时使用. match 仅应用于 base filename, 而不是路径全名....如果设置了choices ,默认的表单将是一个选择框而不是标准的文本框,而且这个选择框的选项就是choices 中的选项。
在 blog 应用的 migrations\ 目录下生成了一个 0001_initial.py 文件,这个文件是 Django 用来记录我们对模型做了哪些修改的文件。...blog 文件夹,把下载的博客模板中的 css 和 js 文件夹连同里面的全部文件一同拷贝进这个目录。..."> 我们没有使用模板标签,因为这里的引用的文件是一个外部文件,不是我们项目里 static\blog\css\ 目录下的文件,因此无需使用模板标签。...当 {% block toc %}{% endblock toc %} 中没有任何内容时,{% block toc %}{% endblock toc %} 在模板中不会显示。...但当其中有内容是,模板就会显示 block 中的内容。
这里唯一的不同是我们从数据库获取文章列表的操作不是在视图函数中进行,而是在模板中通过自定义的 {% get_recent_posts %} 模板标签进行。...模板标签目录结构 首先在我们的 blog 应用下创建一个 templatetags 文件夹。...pk 值(也就是被访问的分类的 id 值)从数据库中获取到这个分类。...auto_now_add 的作用是,当评论数据保存到数据库时,自动把 created_time 的值指定为当前时间。...这些需求都可以利用 Django 提供的 API 来实现。 另外,Django 还有海量的第三方应用来提供更加丰富的功能。比如当他人评论了我的文章时,如何收到通知提醒?
因为当缓存数据存满时将清除部分数据,或者遇到缓存服务器重启时数据将丢失。...因为该使用方案, Session 在保存到缓存的同时还会被保存到数据库中,当 Django 在缓存中找不到Session 时,会从数据库中找到。因此,这种方案的性能开销会比方案一大。...如果我们在工程中同时配置了数据库会话和缓存会话,Django 默认优秀选择缓存会话。 2)保存到文件中 这种方案是保存数据到本地磁盘中。因为磁盘的 I/O 瓶颈问题,导致这种方案存储数据效率不是很高。...www/' SESSION_FILE_PATH 默认使用 tempfile.gettempdir() 方法的返回值,就像 /tmp目录。...如果你想更新文件的保存路径,可以手动指定。另外需确保你的文件存储目录,以及 Web 服务器对该目录具有读写权限。 3)保存到 cookie 中 这种方案将数据保存到 cookie 中。
此外,在 博客从“裸奔”到“有皮肤”[3] 中提过,所有模型的字段都接受一个 verbose_name 参数(大部分是第一个位置参数),django 在根据模型的定义自动生成表单时,会使用这个参数的值作为表单字段的...# 这里我们使用了 django 提供的一个快捷函数 get_object_or_404, # 这个函数的作用是当获取的文章(Post)存在时,则获取;否则返回 404 页面给用户。...form = CommentForm(request.POST) # 当调用 form.is_valid() 方法时,django 自动帮我们检查表单的数据是否符合格式要求。...因为视图函数 comment 中的表单实例是绑定了用户提交的评论数据,以及对数据进行过合法性校验的表单,因此当 django 渲染这个表单时,会连带渲染用户已经填写的表单数据以及数据不合法的错误提示信息...紧接着传入消息的内容,最后 extra_tags 给这条消息打上额外的标签,标签值可以在展示消息时使用,比如这里我们会把这个值用在模板中的 HTML 标签的 class 属性,增加样式。
开发环境中的文件服务器 static.serve(request, path, document_root, show_indexes=False) 在本地的开发环境中,除了你的项目中的静态文件,可能还有一些文件...serve() 视图可以用来作为任意目录的服务器。(该视图不能用于生产环境,应该只用于开发时辅助使用;在生产环境中你应该使用一个真实的前端Web 服务器来服务这些文件)。...django.contrib.staticfiles 用于静态文件且没有对用户上传的文件做处理,但是你可以通过在URLconf 中添加一些内容来让Django 作为MEDIA_ROOT 的服务器: from...中引发一个SuspiciousOperation 时,它可能通过Django 的一个组件处理(例如重设会话的数据)。...如果没有特殊处理,Django 将认为当前的请求时一个’bad request’ 而不是一个server error。
关于创建应用以及 Django 的目录结构在 建立 Django 博客应用 中已经有过介绍。创建新的应用后一定要记得在 settings.py 里注册这个应用,Django 才知道这是一个应用。...,如果你忘了怎么做,再回顾一下 创建 Django 博客的数据库模型 中的做法。...auto_now_add 的作用是,当评论数据保存到数据库时,自动把 created_time 的值指定为当前时间。...在 comments\ 目录下(和 models.py 同级)新建一个 forms.py 文件,用来存放表单代码,我们的表单代码如下: comments/forms.py from django import...# 这里我们使用了 Django 提供的一个快捷函数 get_object_or_404, # 这个函数的作用是当获取的文章(Post)存在时,则获取;否则返回 404 页面给用户。
,包含以下两个异常子类 PageNotAnInteger:当向page()传入一个不是整数的值时抛出 EmptyPage:当向page()提供一个有效值,但是那个页面上没有任何对象时抛出 Page对象...进入到项目同名文件夹下 【即settings.py所在目录】 $ sudo uwsgi --stop uwsgi.pid 说明: 当 uwsgi 启动后,当前 django 项目的程序已变成后台守护进程...} ... } 404/500 界面 在模板文件夹内添加 404.html 模版,当视图触发 Http404 异常时将会被显示 404.html 仅在发布版中 (即 setting.py...中的 DEBUG=False 时) 才起作用 当向应处理函数触发 Http404 异常时就会跳转到 404 界面 from django.http import Http404 def xxx_view...#注意: #1 若报错邮件中牵扯到user,pw,cc等局部变量的值,则会将其替换成 *****, 而 name 变量还显示其真实值 #2 多个装饰器时,需要将其放在最顶部 #3 若不传参数,则过滤所有局部变量的值
}, ] 现在,在templates下创建一个名为admin的文件夹,然后从Django安装的原目录下(目录为django/contrib/admin/templates)将模板页面的源文件admin/...当Django 启动时,它导入INSTALLED_APPS 中列出的每个应用,然后导入每个应用中的models 模块。 每创建一个新的模型时,Django 添加反向的关系到所有关联的模型。...为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为views.py的文件中。...你甚至可以为特定的应用或一个特定的模型覆盖少量的这些模板。 设置你的项目管理模板目录 Admin模板文件位于contrib/admin/templates/admin 目录中。...如果我们将此文件放在templates/admin/my_app目录中,我们的链接将出现在my_app中所有模型的更改表单上。
领取专属 10元无门槛券
手把手带您无忧上云