码迷,mamicode.com
首页 > 其他好文 > 详细

Part2:模型与管理后台

时间:2018-09-20 21:27:44      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:text   poll   磁盘   文件管理   session   key   文件中   messages   避免   

一、数据库安装

  mysite/settings.py配置文件,这是整个Django项目的设置中心,Django默认使用SQLite数据库,因为Python原生支持SQLite数据库,无序安装任何程序,就可以直接使用,当然创建一个实际项目,可以使用类似PostgreSQL的数据库,避免迁移问题。

1.Django自带的SQLite数据库,轻量级的

mysite/settings.py
# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

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

  如果你想使用其他的数据库,请先安装相应的数据库操作模块,并将settings文件中DATABASES位置的"default"的键值进行相应的修改,用于连接你的数据库。

2.使用其他数据库在settings配置

# mysite/settings.py

# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

import pymysql         # 一定要添加这两行!通过pip install pymysql!
pymysql.install_as_MySQLdb()
DATABASES = {
default: {
    ENGINE: django.db.backends.mysql, # 使用的数据库
    NAME: mysite,
    HOST: 192.168.1.1, # 路由
    USER: root, # 数据库的用户名
    PASSWORD: pwd, # 数据库密码
    PORT: 3306, # 端口,Mysql默认是3306端口
    }
}

ENGINE(引擎):

django.db.backends.sqlite3、
django.db.backends.postgresql、  
django.db.backends.mysql、 # 常用数据库
django.db.backends.oracle,
其他也可以

NAME(名称)

  类似Mysql数据库管理系统中用于保存项目内容数据库的名字。如果使用的是默认的SQLite,那么数据库将作为一个文件将存放在你的本地机器内,此时NAME应该是这个文件的完整绝对路径包含文件名,默认值:os.path.join(BASE_DIR, ’db.sqlite3’),将该文件储存在你的项目目录下

  如果不适用默认的SQLite数据库,那么一些诸如USER,PASSWORD和HOST的参数必须手动指定!按照上述进行修改

注意:

  修改时区:找到settings文件,将TIME_ZONE设置为国内所在的时区:Asia/Shanghai

  默认情况,INSTALLED_APPS中会自动包含下列条目,他们都是Django自动创建的

django.contrib.admin:admin管理后台站点
django.contrib.auth:身份认证系统
django.contrib.contenttypes:内容类型框架
django.contrib.sessions:会话框架
django.contrib.messages:消息框架
django.contrib.staticfiles:静态文件管理框架

二、创建模型

  Django通过自定义Python类的形式来定义具体的模型,每个模型的物理存在方式就是一个Python的类Class,每个模型代表数据库中的一张表,每个类的实例代表数据表中的一行数据,类中的每个变量代表数据表中的一列字段。Django通过模型,将Python代码和数据库操作结合起来,实现对SQL查询语言的封装。也就是说,你可以不会管理数据库,可以不会SQL语言,你同样能通过Python的代码进行数据库的操作。Django通过ORM对数据库进行操作,奉行代码优先的理念,将Python程序员和数据库管理员进行分工解耦。

创建两个模型

 

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)
    # 创建投票数 default:默认从0开始
    votes = models.IntegerField(default=0)

  上面的代码非常简单明了。每一个类都是django.db.models.Model的子类。每一个字段都是Field类的一个实例,例如用于保存字符数据的CharField和用于保存时间类型的DateTimeField,它们告诉Django每一个字段保存的数据类型。

  每一个Field实例的名字就是字段的名字(如: questiontext 或者 pubdate )。在你的Python代码中会使用这个值,你的数据库也会将这个值作为表的列名。

  你也可以在每个Field中使用一个可选的第一位置参数用于提供一个人类可读的字段名,让你的模型更友好,更易读,并且将被作为文档的一部分来增强代码的可读性。

  一些Field类必须提供某些特定的参数。例如CharField需要你指定max_length。这不仅是数据库结构的需要,同样也用于数据验证功能。

  有必填参数,当然就会有可选参数,比如在votes里我们将其默认值设为0.

  最后请注意,我们使用ForeignKey定义了一个外键关系。它告诉Django,每一个Choice关联到一个对应的Question(注意要将外键写在‘多’的一方)。Django支持通用的数据关系:一对一,多对一和多对多。

三、启用模型

1.创建app对应的数据库表结构

2.为Question和Choice对象创建基于Python的数据库访问API

首先我们先告诉Django项目

  要将应用添加到项目中,需要在INSTALLEDAPPS设置中泽佳指向改应用的配置文件的连接,对于本列的投票应用,他的配置文件是polls/apps.py,路径各式为:polls.apps.PollsConfig,需要在INSTALLEDAPPS中,将改路径添加进去。

# mysite/settings.py

INSTALLED_APPS = [
django.contrib.admin,
django.contrib.auth,
django.contrib.contenttypes,
django.contrib.sessions,
django.contrib.messages,
django.contrib.staticfiles,
polls.apps.PollsConfig, # 添加app应用
]

现在Django已经知道你的投票应用的存在了,并把它加入了项目的大家庭中。

1.执行命令

python manage.py makemigrations 

会看到类似下面的提示

Migrations for polls:
polls\migrations\0001_initial.py
- Create model Choice
- Create model Question
- Add field question to choice

  通过运行 makemigrations:命令,相当于告诉Django你对模型有改动,并且你想把这些改动保存为一个"迁移(migration)"。

  migrations:是Django保存模型修改记录的文件,这些文件保存在磁盘上,在本例子中,他是polls/migrations/001_initial.py。

  接下来有一个叫做migrate:的命令将对数据库执行真正的迁移动作,但是在此之前,先看看migration的时候实际执行的SQL语句是什么,执行如下

python manage.py sqlmigrate polls 0001

2.运行migrate命令,在数据库中进行真正的表操作

python manage.py migrate

  migrate命令对所有还未实施的迁移记录进行操作,本质上就是将对模型的修改体现到数据库中具体的表上面。Django通过一张djanog_migrations的表,记录并跟踪已经实施migrate动作。

  migrations的功能非常强大,允许你随时修改你的模型,而不需要删除或者新建你的数据库或数据表,在不丢失数据的同时,实时动态更新数据库。我们将在后面的章节对此进行深入的阐述,但是现在,只需要记住修改模型时的操作分三步

  运行python manage.py makemigrations为改动创建迁移记录。

  运行python manage.py migrate,将操作同步到数据库。

四、admin后台管理站点

1.创建管理员用户

创建一个可以登录admin站点的用户:

python manage.py createsuperuser

输入用户名:

Username:admin

输入邮箱地址:

Email address:输入邮箱

输入密码:

Password:
Password(again):
Superuser created successfully.

2.启动开发服务器

1>服务器启动后,在浏览器访问http://127.0.0.1:8000/admin/。你就能看到admin的登陆界面了:

2>打开根url路由文件mysite/urls.py,修改其中admin.site.urls对应的正则表达式,换成你想要的,比如:

from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r^my/set/, admin.site.urls),
]

3.进入admin站点

  利用刚才建立的admin账户,登陆admin

4.在admin中注册投票应用

  现在还无法看到投票应用,必须先在admin中进行注册,告诉admin站点,请将polls的模型加入站点内,接受站点的管理。

  打开polls/admin.py文件,加入下面的内容:

from django.contrib import admin
from .models import Question

admin.site.register(Question)

ps:这里需要注意:

  • 页面中的表单是由Question模型自动生成的。
  • 不同的模型字段类型(DateTimeField, CharField)会表现为不同的HTML input框类型。
  • 每一个DateTimeField都会自动生成一个可点击链接。日期是Today,并有一个日历弹出框;时间是Now,并有一个通用的时间输入列表框。在页面的地步 ,则是一些可选项按钮
  • delete:弹出一个删除确认页面
  • save and add another:保存当前修改,并加载一个新的空白的当前类型对象的表单。
  • save and continue editing:保存当前修改,并重新加载该对象的编辑页面。
  • save:保存修改,返回当前对象类型的列表页面。

Part2:模型与管理后台

标签:text   poll   磁盘   文件管理   session   key   文件中   messages   避免   

原文地址:https://www.cnblogs.com/xiaohei001/p/9675490.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!