zoukankan      html  css  js  c++  java
  • python 3+djanjo 2.0.7简单学习(二)--创建数据库和模型

    我们紧接上次,这里将建立数据库,创建第一个模型提示:这里我们不需要去一直启动,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': '3306',
        }
    }

    编辑 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': '3306',
            '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':
      votesmigrations001_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/

    目前还在学习中,希望会对大家有所帮助,觉得不错,就点赞支持一下。 另外,转载时请附带链接。谢谢!
  • 相关阅读:
    [C#1] 2类型基础
    [C#2] 5迭代器
    [C#1] 6方法
    [C#1] 8数组
    [C#1] 12特性
    [C#1] 10事件
    [C#2] 2匿名方法
    实用代码JavaScript实用小函数一枚(深入对象取值)
    [C#1] 11接口
    实用代码C#获取本机网络适配器信息及MAC地址
  • 原文地址:https://www.cnblogs.com/dangkai/p/9542079.html
Copyright © 2011-2022 走看看