Python3-Django的使用

数据库的建立

创建好一个Django项目之后,编辑mysite(项目模块,自己命名是什么就是什么)/ settings.py。它是一个用模块级别变量表示 Django 配置的普通 Python 模块。

默认情况下,该配置使用SQLite。如果你是数据库初学者,或者你只是想要试用一下Django,它是最简单的选择。 SQLite包含在Python中,所以你不需要另外安装其他任何东西来支持你的数据库。然而,当你开始第一个真正的项目时,你可能想使用一个更健壮的数据库比如PostgreSQL来避免在未来遇到令人头疼的数据库切换问题。

如果你希望使用另外一种数据库,请配置合适的database binding,并在 DATABASES 'default'条目中修改以下的配置以匹配你的数据库连接的设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


ENGINE – 'django.db.backends.sqlite3', 'django.db.backends.postgresql_psycopg2', 'django.db.backends.mysql'或'django.db.backends.oracle'。其它的后台也可以支持。
NAME –  数据库的名称。如果你使用SQLite,数据库将是你计算机上的一个文件; 如果是这样的话,NAME应该是这个文件的绝对路径,包括文件名。默认值是os.path.join(BASE_DIR, 'db.sqlite3'),它将文件保存在你项目的目录中。

如果你使用PostgreSQL或者MySQL,确保到此你已经建立好一个数据库。 可以在你的数据库的交互式提示命令下,使用“CREATE DATABASE database_name;”创建它。
如果你使用SQLite,你不需要事先创建任何东西 —— 数据库文件将会在需要的时候自动创建。

当你编辑mysite/ settings.py时,请设置TIME_ZONE为你自己的时区。
另外,请注意文件顶端的INSTALLED_APPS设置。它保存这个Django实例中激活的所有的Django应用的名字。 应用可以在多个项目中使用,而且你可以将这些应用打包和分发给其他人在他们的项目中使用。
默认情况下,INSTALLED_APPS包含下面的应用,它们都是Django 与生俱来的:

'''
django.contrib.admin —— 管理站点。你将在本教程的第2部分使用到它。
django.contrib.auth —— 认证系统。
django.contrib.contenttypes —— 用于内容类型的框架。
django.contrib.sessions —— 会话框架。
django.contrib.messages —— 消息框架。
django.contrib.staticfiles —— 管理静态文件的框架。
这些应用,默认包含在Django中,以方便通用场合下使用。
'''
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls',
    'student',
]


然而上面的部分应用至少需要使用一个数据库表,因此我们需要在使用它们之前先在数据库中创建相应的表。要做到这一点,打开命令窗口输入:

python manage.py migrate

migrate查看INSTALLED_APPS设置并根据mysite/settings.py文件中的数据库设置创建任何必要的数据库表,数据库的迁移还会跟踪应用的变化(我们稍后会讲到)。user如果你有兴趣,可以运行你的数据库的命令行客户端并输入dt (PostgreSQL), SHOW TABLES; (MySQL)或.schema (SQLite)来显示Django创建的表。

对于极简主义者来说

就像我们上面说到的,以上包含的默认应用用于常见的场景,但并不是每个人都需要它们。 如果你不需要它们中的任何一个或所有应用,可以在运行migrate之前从INSTALLED_APPS中自由地注释或删除相应的行。migrate 命令将只为INSTALLED_APPS中的应用运行数据库的迁移。

创建模型

要创建您的应用程序,请确保您与manage.py在同一目录中,并键入以下命令:
$ python manage.py startapp polls

这将创建一个目录polls,它的结构如下:

polls/
    __init__.py
    admin.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py
我们的polls应用将基于这个目录结构。

之后我们就可以编辑polls/models.py文件,来编写我们自己的模块,并让它看起来像这样:

from django.db import models #导入django带的models模块

# Create your models here.
class Student(models.Model): #继承models模块
    name=models.CharField(max_length=50,unique=True,null=False)#Django认为必须有id这个属性,不写,也会为我们自动生成
    age=models.IntegerField(default=0)

不同的models.xxxField() 有不同的参数,代表着一些之后数据库生成表的,长度、唯一、非空....一些状态

根据我们自己的需要来编写

激活模型

再次编辑mysite/settings.py文件,并修改INSTALLED_APPS设置以包含字符串'polls'所以它现在是这样的:

 
  
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls',
]
现在Django知道要包含polls应用。 让我们运行另外一个命令:
$ python manage.py makemigrations polls
你应该看到类似下面的内容:
Migrations for 'polls':
  0001_initial.py:
    - Create model Student
    - Add field question to choice
通过运行makemigrations告诉Django,已经对模型做了一些更改(在这个例子中,你创建了一个新的模型)并且会将这些更改记录为迁移文件。

迁移是 Django 如何储存模型的变化(以及您的数据库模式),它们只是磁盘上的文件。如果愿意,你可以阅读这些为新模型建立的迁移文件;这个迁移文件就是  polls/migrations/0001_initial.py。不用担心,Django不要求你在每次Django生成迁移文件之后都要阅读这些文件,但是它们被设计成可人为编辑的形式,以便你可以手工稍微修改一下Django的某些具体行为。

有一个命令可以运行这些迁移文件并自动管理你的数据库模式 —— 它叫做migrate,我们一会儿会用到它 —— 但是首先,让我们看一下迁移行为将会执行哪些SQL语句。sqlmigrate命令接收迁移文件的名字并返回它们的SQL语句:
$ python manage.py sqlmigrate polls 0001
你应该会看到类似如下的内容(为了便于阅读我们对它重新编排了格式):

BEGIN;
CREATE TABLE "polls_choice" (
    "id" serial NOT NULL PRIMARY KEY,
    "choice_text" varchar(200) NOT NULL,
    "votes" integer NOT NULL
);
CREATE TABLE "polls_question" (
    "id" serial NOT NULL PRIMARY KEY,
    "question_text" varchar(200) NOT NULL,
    "pub_date" timestamp with time zone NOT NULL
);
ALTER TABLE "polls_choice" ADD COLUMN "question_id" integer NOT NULL;
ALTER TABLE "polls_choice" ALTER COLUMN "question_id" DROP DEFAULT;
CREATE INDEX "polls_choice_7aa0f6ee" ON "polls_choice" ("question_id");
ALTER TABLE "polls_choice"
  ADD CONSTRAINT "polls_choice_question_id_246c99a640fbbd72_fk_polls_question_id"
    FOREIGN KEY ("question_id")
    REFERENCES "polls_question" ("id")
    DEFERRABLE INITIALLY DEFERRED;


COMMIT;
请注意以下几点:

输出的具体内容会依据你使用的数据库而不同。 以上例子使用的数据库是PostgreSQL。
表名是自动生成的,由app的名字(polls)和模型名字的小写字母组合而成 —— question和choice。(你可以重写这个行为。)
主键(id)是自动添加的。(你也可以重写这个行为。)
按照惯例,Django会在外键的字段名后面添加 "_id"。(是的,你依然可以重写这个行为。)

注:sqlmigrate命令并不会在你的数据库上真正运行迁移文件 —— 它只是把Django 认为需要的SQL打印在屏幕上以让你能够看到。 这对于检查Django将要进行的数据库操作或者你的数据库管理员需要这些SQL脚本是非常有用的。
如果有兴趣,你还可以运行python manage.py check;它会检查你的项目中的模型是否存在问题,而不用执行迁移或者接触数据库。

现在,再次运行migrate命令以在你的数据库中创建模型所对应的表:
$
python manage.py migrate
Operations to perform:
  Synchronize unmigrated apps: staticfiles, messages
  Apply all migrations: admin, contenttypes, polls, auth, sessions
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  Rendering model states... DONE
  Applying ... OK


migrate命令会找出所有还没有被应用的迁移文件(Django使用数据库中一个叫做django_migrations的特殊表来追踪哪些迁移文件已经被应用过),并且在你的数据库上运行它们 —— 本质上来讲,就是使你的数据库模式和你改动后的模型进行同步。


迁移功能非常强大,可以让你在开发过程中不断修改你的模型而不用删除数据库或者表然后再重新生成一个新的 —— 它专注于升级你的数据库且不丢失数据。请记住实现模型变更的三个步骤

1.修改你的模型(在models.py文件中)。
2.运行python manage.py makemigrations ,为这些修改创建迁移文件
3.运行python manage.py migrate ,将这些改变更新到数据库中。

将生成和应用迁移文件的命令分成几个命令来执行,是因为你可能需要将迁移文件提交到你的版本控制系统中并跟随你的应用一起变化; 这样做不仅可以使开发变得更加简单,而且对其他开发者以及上线生产非常有用。

编写你的第一个视图

让我们来编写第一个视图。 打开polls/views.py文件并将以下Python代码写入:

polls/views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")
这可能是Django中最简单的视图。 为了能够调用这个视图,我们需要将这个视图映射到URL上 —— 利用一个URLconf。

要在polls目录中创建一个URLconf,创建一个名为urls.py的文件。你的应用的目录现在看起来应该像这样:

polls/
    __init__.py
    admin.py
    models.py
    tests.py
    urls.py
    views.py

在polls/views.py文件中键入如下代码:

from django.shortcuts import render
def hello(request):
    return render(request,"hello.html") #调用我们这个函数的时候利用render()函数来渲染返回一个hello.html页面(页面自己创建)
 
  
在polls/urls.py文件中键入如下代码:
from django.conf.urls import url
from student import views as studentViews #导入我们自己的模块,并起一个别名
urlpatterns = [
    url(r'^hello$', studentViews.hello), #可以直观的看出一会我们需要访问,hello来找到我们自己模块的studentViews.hello
]

下一步,让主URLconf可以链接到polls.urls模块。在mysite/urls.py中插入一个include():

mysite /urls.py
from django.conf.urls import url,include #导入include模块
from django.contrib import admin #这是Django自带的
from polls import urls #导入我们自己创建的urls模块
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^student/', include(urls)),#通过include()把我们的polls/urls模块导入这里
]
这样我们的url就连接成功了

之后启动我们的Django项目,如果你不在外层的mysite目录下,那么进入这个目录,然后运行以下命令:

$ python manage.py runserver
你将看到命令行下输出了以下内容:

Performing system checks...
0 errors found
May 13, 2015 - 15:50:53
Django version 1.8, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.


这表明你已经启动了Django开发服务器,一个用纯Python写的轻量级Web服务器。 我们在Django中内置了它,这样你就可以在不配置用于生产环境的服务器 —— 例如Apache —— 的情况下快速开发出产品,直到你准备好上线。
请注意:不要在任何生产环境使用这个服务器。它仅仅是用于在开发中使用。(我们的重点是编写Web框架,非Web服务器。)


既然服务器已经运行,请用你的浏览器访问 http://127.0.0.1:8000/student/hello。就可以通过我们刚才的步骤找到一个我们自己做的“hello.html”的页面。 它运行成功了!




你可能感兴趣的:(Python3-Django的使用)