项目与应用
项目和应用有啥区别?
应用是一个专门做某件事的网络应用程序 - 比如博客系统,或者公共记录的数据库,或者简单的投票程序。
项目则是一个网站使用的配置和应用的集合。项目可以包含很多个应用。应用可以被很多个项目使用。
创建项目
一个 Django 项目实例需要的设置项集合,包括 Django 配置和应用程序设置
start
$ django-admin startproject mysite
这行代码将会在当前目录下创建一个 mysite 目录
- manage.py:一个让你用各种方式管理 Django 项目的命令行工具
mysite/ 目录包含你的项目,它是一个纯 Python 包。它的名字就是当你引用它内部任何东西时需要用到的 Python 包名。
mysite/init.py:一个用于指明此目录是 Python 包的空白文件
mysite/settings.py:Django 项目的配置文件
mysite/urls.py:Django 项目的 URL 声明,就像是你网站的“目录”
mysite/wsgi.py:当你部署项目到一个兼容 WSGI 的服务器上时所需要的入口点
INSTALLED_APPS
mysite/settings.py。这是包含着 Django 项目设置的 Python 模块。
文件头部的 INSTALLED_APPS 设置项,这里包括了会在你项目中启用的所有 Django 应用。应用能在多个项目中使用,你也可以打包并且发布应用,让别人使用它们
通常,INSTALLED_APPS 默认包括了以下 Django 的自带应用:
django.contrib.admin - 管理员界面。你将会在 教程的第二部分(zh) 使用它。
django.contrib.auth - 验证系统。
django.contrib.contenttypes - 内容类型框架。
django.contrib.sessions - 会话框架。
django.contrib.messages - 消息框架。
django.contrib.staticfiles - 管理静态文件的框架。
默认开启的某些应用需要至少一个数据表,所以,在使用他们之前需要在数据库中创建一些表。请执行以下命令:
$ python manage.py migrate
migrate 命令检查 INSTALLED_APPS 设置,为其中的每个应用创建需要的数据表,这取决于你的 mysite/settings.py 设置文件和每个应用的数据库迁移文件.migrate 命令只会为在 INSTALLED_APPS 里声明了的应用进行数据库迁移。
launch
$ python manage.py runserver
此时开启的是django默认附带的一个简易服务器,默认在本机8000端口内可查看当前网站内容。
App
应用可以放在 Python path 中的任何目录里。在本次试验中,将直接在 manage.py 所在的目录里创建test应用,这样它就能够被当做顶级模块被引入,而不是作为 mysite 的子模块.
$ python manage.py startapp polls
在当前目录下创建名为polls的应用
1 | polls/ |
create model
在 Django 里写一个数据库驱动的 Web 应用的第一步是定义模型 - 也就是数据库结构设计和附加的其他元数据。
模型是真实数据的简单明确的描述。它包含了储存的数据所必要的字段和行为。
本次简单的投票实例中需要两个model,即Question和Choice.
问题模型包括问题描述和发布时间。选项模型有两个字段,选项描述和当前得票数。每个选项属于一个问题。
编辑 polls/models.py 文件
1 | # polls/models.py |
再次编辑 mysite/settings.py,改变 INSTALLED_APPS 设置,使其包含字符串 polls。它现在看起来应该像这样:
1 | INSTALLED_APPS = ( |
App migration
项目创建polls应用之后:
$ python manage.py makemigrations polls
通过 migrations 命令,Django 会检测你对模型文件的修改,并且把修改的部分储存为一次 迁移。
迁移是 Django 对于模型定义(也就是你的数据库结构)的变化的储存形式 - 其实也只是一些你磁盘上的文件。如果你想的话,你可以阅读一下你模型的迁移数据,它被储存在 polls/migrations/0001_initial.py 里。别担心,你不需要每次都阅读迁移文件,但是它们被设计成人类可读的形式,这是为了便于你手动修改它们。
现在,再次运行 migrate 命令,在数据库里创建新定义的模型的数据表
$ python manage.py migrate
migrate 命令选中所有还没有执行过的迁移(Django 通过在数据库中创建一个特殊的表 django_migrations 来跟踪执行过哪些迁移)并应用在数据库上 - 也就是将你对模型的更改同步到数据库结构上。
综上所述,改变app的model需要以下几步
编辑 models.py 文件,改变模型(如果是初创建的app,甚至需要在setting文件中扩入installed-apps)
运行 python manage.py makemigrations 为模型的改变生成迁移文件(相当于commit)
运行 python manage.py migrate 来应用数据库迁移(相当于真正的push)
一些基本数据操作
在django shell编程模式下:
1 | from polls.models import Question, Choice # 导入刚刚创建的模型类 |
在python3下,对应配套的django框架中我们可以通过改变Model的内置函数__str__()
,当调用Model.objects.all()
方法时,列出str()方法修改的内容。
在Python2中,想要达到相同的目的,则是需要修改unicode()方法,此时django将会调用py2版本的django模块中内置方法str()函数,str()函数调用unicode()方法。
1 | from django.db import models |
下面是使用API的一些小例子:
1 | from django.utils import timezone |