我们紧接上次,这里将建立数据库,创建第一个模型提示:这里我们不需要去一直启动,django会在我们ctrl+s的时候自动刷新并启动服务,很方便吧

 1.数据库配置

现在,打开 vote_mysite/settings.py 。这是个包含了 Django 项目设置的 Python 模块:这里我是用了mysql数据库

找到settings.py中DATABASES 参数,将其内容替换为

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', #mysql数据库
'NAME': 'mydatabase', #数据库名
'USER': 'mydatabaseuser',# 用户
'PASSWORD': 'mypassword', #密码
'HOST': '127.0.0.1', 本地
'PORT': '',
}
}
编辑 mysite/settings.py 文件前,先设置 TIME_ZONE 为你自己时区。
TIME_ZONE = 'America/Chicago'

改为

TIME_ZONE = 'Asia/Shanghai'

此外,关注一下文件头部的 INSTALLED_APPS 设置项。这里包括了会在你项目中启用的所有 Django 应用。应用能在多个项目中使用,你也可以打包并且发布应用,让别人使用它们。

通常, INSTALLED_APPS 默认包括了以下 Django 的自带应用:

INSTALLED_APPS = [
'django.contrib.admin', #管理员站点
'django.contrib.auth',#认证授权系统
'django.contrib.contenttypes',#内容类型框架
'django.contrib.sessions',#会话消息
'django.contrib.messages',#消息框架
'django.contrib.staticfiles',#管理静态文件的框架
]

这些应用被默认启用是为了给常规项目提供方便。

默认开启的某些应用需要至少一个数据表,所以,在使用他们之前需要在数据库中创建一些表。

输入命令:

python manage.py migrate #这个 migrate 命令检查 INSTALLED_APPS 设置,为其中的每个应用创建需要的数据表
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK

这里有个警告,虽然没啥大影响,但具有强迫症的我还是很不爽

WARNINGS:
?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default'
HINT: MySQL's Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it. See: https://docs.djangoproject.com/en/2.1/ref/databases/#mysql-sql-mode

解决办法:

在settings中,在DATABASES变量定义处下面添加

DATABASES['OPTIONS']['init_command'] = "SET sql_mode='STRICT_TRANS_TABLES'"

或者在DATABASES变量定义时,添加上面命令中所示的键值对。

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'votes',
'USER': 'root',
'PASSWORD': 'xxxxxxxx',
'HOST': '127.0.0.1',
'PORT': '',
'OPTIONS':{
'init_command':"SET sql_mode='STRICT_TRANS_TABLES'",
'charset':'utf8mb4',
}
}
}

2.创建模型

自带数据表创建完成后,我们要创建模型--也就是数据库结构设计和附加的其它元数据。

在投票应用中,需要创建两个模型:问题 Question 和选项 ChoiceQuestion 模型包括问题描述和发布时间。Choice 模型有两个字段,选项描述和当前得票数。

from django.db import models

# Create your models here.
class Question(models.Model):
"""docstring for Question"""
question_text=models.CharField(max_length=200)
pub_date=models.DateTimeField('date published')
class Choice(models.Model):
"""docstring for Choice"""
question=models.ForeignKey(Question,on_delete=models.CASCADE)
#创建多对一的关系的,需要在Foreign的第二参数中加入on_delete=models.CASCADE
#主外关系键中,级联删除,也就是当删除主表的数据时候从表中的数据也随着一起删除
choice_text=models.CharField(max_length=200)
votes=models.IntegerField(default=0)

3.激活模型(利用模型创建数据库)

首先得把 votes 应用安装到我们的项目里。为了在我们的工程中包含这个应用,我们需要在配置类 INSTALLED_APPS 中添加设置。因为VotesConfig 类写在文件 votes/apps.py 中,所以它的点式路径是 'votes.apps.VotesConfig'。在文件 vote_mysite/settings.py中 INSTALLED_APPS 子项添加点式路径后,它看起来像这样:

INSTALLED_APPS = [
'votes.apps.VotesConfig',#新增
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

现在你的 Django 项目会包含votes 应用,输入以下命令:

python manage.py makemigrations votes

你将会看到类似于下面这样的输出:

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

Django 有一个自动执行数据库迁移并同步管理你的数据库结构的命令 - 这个命令是 migrate

sqlmigrate 命令接收一个迁移的名称,然后返回对应的 SQL:

python manage.py sqlmigrate votes 0001

你将会看到:

BEGIN;
--
-- Create model Choice
--
CREATE TABLE `votes_choice` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `choice_text` varchar(200) NOT NULL, `votes` integer NOT NULL);
--
-- Create model Question
--
CREATE TABLE `votes_question` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `question_text` varchar(200) NOT NULL, `pub_date` datetime(6) NOT NULL);
--
-- Add field question to choice
--
ALTER TABLE `votes_choice` ADD COLUMN `question_id` integer NOT NULL;
ALTER TABLE `votes_choice` ADD CONSTRAINT `votes_choice_question_id_eaed6223_fk_votes_question_id` FOREIGN KEY (`question_id`) REFERENCES `votes_question` (`id`);
COMMIT;

创建数据表后,测试数据库使用在cmd里命令:

python manage.py shell

给 Question 和 Choice 增加 __str__() 方法。它不仅仅能给你在命令行里使用带来方便,Django 自动生成的 admin 里也使用这个方法来表示对象。

votes/models.py

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

当然了 你也可以在里边自定义一些方法:请查阅官方文档https://docs.djangoproject.com/zh-hans/2.1/intro/tutorial02/

python 3+djanjo 2.0.7简单学习(二)--创建数据库和模型的更多相关文章

  1. python 3+djanjo 2.0.7简单学习(一)

    1.安装django pip install django 我这里已经安装过了 整个目录结构如下: votes : migrations : __init__.py : admin.py : apps ...

  2. python 3+djanjo 2.0.7简单学习(三)--Django 管理页面

    django里自带了一个管理页面,也就是后台,下面来学习一下 1.创建超级管理员 python manage.py createsuperuser 键入你想要使用的用户名,然后按下回车键: Usern ...

  3. python 3+djanjo 2.0.7简单学习(五)--Django投票应用

    1.编写一个简单的表单 编写的投票详细页面的模板 ("votes/detail.html") ,让它包含一个 HTML <form> 元素: <!DOCTYPE ...

  4. python 3+djanjo 2.0.7简单学习(四)--Django视图

    1.概念 Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」.比如,在一个博客应用中,你可能会创建如下几个视图: 博客首页——展示最近的几项内容. 内容“详情”页——详细展示某项内容 ...

  5. Python版:Selenium2.0之WebDriver学习总结_实例1

    Python版:Selenium2.0之WebDriver学习总结_实例1  快来加入群[python爬虫交流群](群号570070796),发现精彩内容. 实属转载:本人看的原文地址 :http:/ ...

  6. Java秒杀简单设计二:数据库表和Dao层设计

    Java秒杀简单设计二:数据库表Dao层设计 上一篇中搭建springboot项目环境和设计数据库表  https://www.cnblogs.com/taiguyiba/p/9791431.html ...

  7. NetCore2.0下使用EF CodeFirst创建数据库

    本文所使用的VS版本:VS2017 15.3.0 首先新建一个.net core项目  取名NetCoreTask 使用模型视图控制器方式 新建Model层 在Model层下新建一个user实体类 1 ...

  8. Android学习---如何创建数据库,SQLite(onCreate,onUpgrade方法)和SQLiteStudio的使用

    一.android中使用什么数据库? SQLite是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程式庫中.它是D.RichardHipp建立的公有领域项目.SQLite 是一个软件库,实现 ...

  9. SQLite3学习笔记----创建数据库的两种方式

    今天研究学习SQLite,刚开始创建数据库,就遇到了一个坑,是自己粗心了,特记录一下. 实验环境: OS:Ubuntu18.04 创建数据库名称:test.db 实验步骤: 1.检查是否已经安装了SQ ...

随机推荐

  1. c++中enum 如何使用(转)

    ENUM概况 enum枚举类型是C/C++中的一种数据类型,与struct和class一样是用户自定义的类型,其特点在于enum类型的变量取值是有限的,是可以一一列举出来的. ENUM定义 C++ e ...

  2. 解决哈希(HASH)冲突的主要方法

    https://blog.csdn.net/xtzmm1215/article/details/47177701   虽然我们不希望发生冲突,但实际上发生冲突的可能性仍是存在的.当关键字值域远大于哈希 ...

  3. js模仿微信语音播放的小功能

    自己写的一个模仿微信语音播放的小功能,实现的主要功能是:点击播放,点击暂停,播放切换,,,  代码如下: <!DOCTYPE html> <html lang="en&qu ...

  4. Yii2 前台控制器访问权限控制

    class BaseController extends Controller { public function behaviors() { return [ 'access' => [ 'c ...

  5. 【ACM】小猴子下落

    小猴子下落 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 有一颗二叉树,最大深度为D,且所有叶子的深度都相同.所有结点从左到右从上到下的编号为1,2,3,····· ...

  6. SQL SERVER LEFT JOIN, INNER JOIN, RIGHT JOIN

    JOIN: 如果表中有至少一个匹配,则返回行 LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行 FULL JOIN: 只 ...

  7. Python3 PIL Image 操作文件后导致占用问题

    需求:按图片分辨率范围分类图片(每个商品有N张图片在一个目录内). 实现:用PIL Image打开图片并读取宽度和高度.然后按不同分辨率存档到不同目录. 问题:从原有目录移动到目标目录时出现 “Per ...

  8. Java基础04-数据的输入

    1.为什么要有数据的输入? 实现人机进行交互 2.什么是数据的输入? 利用扫描仪Scanner进行数据输入 3.怎么使用扫描仪Scanner? (1)放在类声明之前,引入扫描仪 import java ...

  9. Ubuntu16.04搭建深度学习框架——TensorFlow

    TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库,说白了,就是一个库. 小编自己在Ubuntu搭建了深度学习框架TensorFlow,感觉挺简单,现 ...

  10. Oracle错误——ORA-03113:通信通道的文件结尾

    请参考:http://blog.csdn.net/zwk626542417/article/details/39667999 今天跟往常一样,登陆PL/SQL,确登陆失败,出现一个错误“ORA-010 ...