django教程二

数据库配置
打开mysite/settings.py文件,这是Django的配置文件。

默认使用SQLite数据库,Python包含SQLite,所以不需要安装其他程序来支持数据库。

如果想使用其它数据库,还需要安装相应的数据库驱动,并修改DATABASES ‘default’ 项中的以下设置:

ENGINE —— ‘django.db.backends.sqlite3’、‘django.db.backends.postgresql’、‘django.db.backends.mysql’或’django.db.backends.oracle’。或者其它数据库。
NAME —— 数据库名。
如果不使用SQLite,还需要设置USER、PASSWORD、HOST,详见配置数据库。

设置语言为简体中文:

LANGUAGE_CODE = 'zh-Hans'

设置时区为东八区:

TIME_ZONE = 'Asia/Shanghai'
INSTALLED_APPS中的默认应用需

要至少一个数据库表,所以现在需要创建数据库表,在PyCharm的Terminal中执行以下命令:

py manage.py migrate

创建模型
我们将创建两个模型:Question和Choice。一个Question包含一个问题和发布时间,一个Choice包含选择文本和投票计数。每个Choice都和一个Question关联。

编辑polls/models.py,如下所示:

 from django.db import models

 
 
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
 
 
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

model代表数据库表,model中的变量代表数据库表中的字段(变量名即字段名)。

激活模型
Django根据模型自动创建数据库表和访问数据库表中对象的Python API。

但需要首先将polls应用配置到project中,即将polls/apps.py中的PollsConfig类配置到mysite/settings.py中,如下所示:

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

执行以下命令:

py manage.py makemigrations polls

改变模型后执行makemigrations命令可以令Django生成数据库迁移文件,用于记录数据库变更历史,这里生成了polls/migrations/0001_initial.py。

执行migrate命令来创建数据库表:

py manage.py migrate

记住,改变模型时需要做以下三步:

改变models.py中的模型;
执行py manage.py makemigrations来创建数据库迁移文件;
执行py manage.py migrate来修改数据库。
试用Django API
执行以下命令打开Python Shell:

py manage.py shell
试执行以下数据库API:

>>> from polls.models import Choice, Question  # Import the model classes we just wrote.
 
# No questions are in the system yet.
>>> Question.objects.all()

 
# Create a new Question.
# Support for time zones is enabled in the default settings file, so
# Django expects a datetime with tzinfo for pub_date. Use timezone.now()
# instead of datetime.datetime.now() and it will do the right thing.
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
 
# Save the object into the database. You have to call save() explicitly.
>>> q.save()
 
# Now it has an ID.
>>> q.id
1
 
# Access model field values via Python attributes.
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=)
 
# Change values by changing the attributes, then calling save().
>>> q.question_text = "What's up?"
>>> q.save()
 
# objects.all() displays all the questions in the database.
>>> Question.objects.all()
]>

在这里不能提供这个对象的有用信息,可以通过为polls/models.py中的模型增加__str__()方法来解决:

from django.db import models
 
class Question(models.Model):
    # ...
    def __str__(self):
        return self.question_text
 
class Choice(models.Model):
    # ...
    def __str__(self):
        return self.choice_text

再为Question增加一个自定义方法:

import datetime
 
from django.db import models
from django.utils import timezone
 
 
class Question(models.Model):
    # ...
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

执行py manage.py shell打开Python Shell,试执行以下数据库API:

执行以下命令,根据提示输入用户名、密码:

py manage.py createsuperuser

启动开发服务器
执行py manage.py runserver命令启动开发服务器,使用浏览器访问http://127.0.0.1:8000/admin/,将看到以下页面:

django教程二_第1张图片

使用上一步创建的管理员账户登录,即可进入Django管理网站首页。

添加polls应用
首页默认是没有polls应用的,必须修改polls/admin.py文件:

from django.contrib import admin
 
from .models import Question
 
admin.site.register(Question)

在浏览器中刷新页面:

django教程二_第2张图片

点击“Questions”即可对Questions表(polls_question表)进行增删改查等操作

你可能感兴趣的:(django教程二)