登录        注册
本站基于Django开发,源码 Github 欢迎 Fork、Star。由于站点升级导致评论区留言信息丢失,欢迎前来发表新的评论

Django个人博客开发五 | 创建第一个APP

Django stormsha 3360浏览 211喜欢 0评论
本渣渣不专注技术,只专注使用技术,不是一个资深的coder,是一个不折不扣的copier

1、创建APP

创建APP

Django 中的一个app就是一个小的项目,我们通过 startapp 命令即可创建, 一下提供两种方式

①启动虚拟环境 stormsha

    //~为项目所在路径
    $ cd ~/blog
    $ django-admin startapp storm
    $ cd storm
    |-- storm           # 博客应用
    |   |-- migrations  # 数据库映射文件
    |   |-- __init__.py # 声明模块,内容默认为空
    |   |-- admin.py    # 该应用的后台管理系统
    |   |-- apps.py     # 应用配置,Django-1.9以后自动生成
    |   |-- models.py   # 数据模块,使用ORM框架
    |   |-- tests.py    # 自动化测试的模块        
    |   |-- views.py    # 执行响应的代码所在模块,是代码逻辑处理的主要地点,项目中大部分代码在这里编写    

②Pycharm 中的 Tools -> run manage.py task 下执行命令:

    startapp storm

这样就可以创建出一个名为 storm 的 app

目前项目完整结构

    .
    |-- blog
    |   |-- storm               # 博客应用
    |   |   |-- migrations      # 数据库映射文件
    |   |   |-- __init__.py     # 声明模块,内容默认为空
    |   |   |-- admin.py        # 该应用的后台管理系统
    |   |   |-- apps.py         # 应用配置,Django-1.9以后自动生成
    |   |   |-- models.py       # 数据模块,使用ORM框架
    |   |   |-- tests.py        # 自动化测试的模块        
    |   |   |-- views.py        # 执行响应的代码所在模块,是代码逻辑处理的主要地点,项目中大部分代码在这里编写
    |   |-- blog                # 项目的容器
    |   |   |-- __init__.py     # 声明模块,内容默认为空
    |   |   |-- settings.py     # 该 Django 项目的设置/配置。
    |   |   |-- urls.py         # 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
    |   `-- wsgi.py             # 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目
    `-- manage.py

注册新增APP

blog -> blog -> settings.py

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'storm',    # 添加用户应用
    ]

2、迁移数据库

推荐阅读:mysql5.7.21 安装与使用

创建数据库

使用 Mysql 创建数据库 blog ,数据库编码类型 utf-8

推荐阅读:命令行创建   Navicat for MySQL创建数据库

连接数据库

Django 中默认的数据库是 sqlite3

blog -> blog -> settings.py

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

将其改为:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': 'localhost',
            'PORT': '3306',
            'USER': 'root',
            'PASSWORD': 'mysql',
            'NAME': 'blog',
            # 避免映射数据库时出现警告
            'OPTIONS': {
                'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
                'charset': 'utf8mb4',
            },
        }
    }

此时 Django 与 Mysql 关联上了,但是 Python 并没有与 Mysql 连接上,启动虚拟环境 stormsha,安装pymysql

    $ workon stormsha
    $ pip install pymysql

Tools -> run manage.py task 下依次执行命令:

    $ makemigrations
    $ migrate

当执行了 makemigrations 后,Django 在 storm 应用的 migrations\ 目录下生成了一个 0001_initial.py 文件,这个文件是 Django 用来记录我们对模型做了哪些修改的文件。

不过此时只是告诉了 Django 做了哪些改变,为了让 Django 真正地为我们创建数据库表,接下来执行 migrate 命令。

Django 通过检测应用中 migrations\ 目录下的文件,得知我们对数据库做了哪些操作,然后它把这些操作翻译成数据库操作语言,从而把这些操作作用于数据库。

经过这两项操作后,我们打开 navicat 中的 blog 数据库,发现多了如下表单,这些表单为Django 自身还内置的很多应用,这些应用本身也是需要存储数据的。

    auth_group, 
    auth_group_permissions, 
    auth_permission, 
    auth_user, 
    auth_user_groups, 
    auth_user_user_permissions, 
    django_admin_log, 
    django_content_type, 
    django_migrations, 
    django_session

我们在执行迁移数据库的操作时,如下警告:

    WARNINGS: 
    ?: (1_8.W001) The standalone TEMPLATE_* settings were deprecated in Django 1.8 and the TEMPLATES dictionary takes precedence. You must put the values of the following settings into your default TEMPLATES dict: TEMPLATE_DIRS.

这是因为 Django 版本的问题产生的,解决方法按照提示操作,打开 settings.py,将如下语句删掉:

    TEMPLATE_DIRS = (os.path.join(BASE_DIR,  'templates'),)

并将 templates 的位置添加到TEMPLATE中:

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            # 添加此行,注册 Django templates模板
            'DIRS': [os.path.join(BASE_DIR, 'templates')],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]

添加templates模板文件夹

此时可能你会发现项目文件中并没有 templates文件

    .
    |-- blog
    |   |-- storm               # 博客应用
    |   |   |-- migrations      # 数据库映射文件
    |   |   |-- __init__.py     # 声明模块,内容默认为空
    |   |   |-- admin.py        # 该应用的后台管理系统
    |   |   |-- apps.py         # 应用配置,Django-1.9以后自动生成
    |   |   |-- models.py       # 数据模块,使用ORM框架
    |   |   |-- tests.py        # 自动化测试的模块        
    |   |   |-- views.py        # 执行响应的代码所在模块,是代码逻辑处理的主要地点,项目中大部分代码在这里编写        
    |   |-- blog                # 项目的容器
    |   |   |-- __init__.py     # 声明模块,内容默认为空
    |   |   |-- settings.py     # 该 Django 项目的设置/配置。
    |   |   |-- urls.py         # 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
    |   `-- wsgi.py             # 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目
    |   |-- templates           # 模板文件
    `-- manage.py

【注意】——这里最好把新建的 templates 文件,Mark 为模板文件

把鼠标放在 templates 文件上,右击鼠标,选择 Mark Directory as -> Template Folder, 点击确定

————————————————————————————————————————————————————————————————————————————————————

转载请注明: StormSha » Django个人博客开发五 | 创建第一个APP

发表我的评论

表情
(0)个小伙伴在吐槽|0条评论
暂时没有评论,欢迎来尬聊!