Django之创建项目

创建虚拟环境——创建django项目——创建工作子项目——配置数据库连接——生成数据库表——测试项目启动

ps: 一个系统可以装多个版本的 python 解释器,但是之后用到的第三方包会很多,如果一个系统上要开发很多个python项目,那么用到的依赖包都不一样,如果都直接安装在系统环境中,那么会显的相当臃肿,再者,不同的项目可能用到的包的版本是不一样的,所以使用虚拟环境才是正解。

下面以windows为例,linux太熟悉了,懒的写。

django是自学的,下面的是看完别人的项目自己尝试了一下使用 apps 目录放应用项目(子项目),有不合理的地方被专业的开发刷到请不要见笑,我的目标只是要做一个会开发的好运维。

1、使用命令安装虚拟环境

  命令行切换到要安装虚拟环境的路径,直接执行下面的命令,即可创建虚拟环境。我是在 E:\python_project\yl\venv 下面执行的此命令(Linux和windows都可以使用此命令创建)

python3 -m venv .

Django之创建项目

cd 命令切换到 Scripts 目录中,执行 activate 就会加载到虚拟环境的环境变量了。加载成功会显示 (venv)

Django之创建项目

此时使用 pip 命令安装的所有包全部会安装到虚拟环境的主目录 Lib 下

使用 pip 安装 django 和 pymysql ,django最好选择一个稳定版本,新版本有 bug 

pip install django==2.2.7
pip install pymysql

二、创建django项目

等待安装完毕后,再选择一个要创建项目的位置,使用 django-admin.exe 命令创建项目

django-admin.exe startproject schaduler_works

创建完毕后,会看到一个 schaduler_works 目录

三、创建应用项目

切到 schaduler_works 目录中,手动创建一个新的目录 apps,再进入 apps 目录中,然后创建一个应用项目(也可以不在 apps 中创建,在apps中创建一般都是稍微大型的项目规划的更细致需要的)

cd schaduler_works\apps
python ../manage.py startapp workduty

创建好后,可以看到多了一个 workduty 的目录,目录结构如下。

Django之创建项目

四、配置新项目、数据库连接

打开 schaduler_works/settings.py 文件,修改如下

在 INSTALLED_APPS 中加入新创建的应用,我是在 apps 目录下创建的,所以要写成 apps.workduty 

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

 然后配置mysql连接,NAME的值是数据库的名称

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

DATABASES = {
    'default':
    {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'schaduler_works',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': '123qwe',
    }
}

 在 schaduler_works/__init__.py 文件中引入 pymysql 的包,这里不写会报错的(但是我见过有的项目没写,不知道为什么,我是个运维,django这块儿也是个新手,这算是我笔记吧)

import pymysql
pymysql.install_as_MySQLdb()

五、创建 models ,使用 ORM 将数据库表同步到数据库中

在 apps\workduty\models.py 中写入要创建的数据库表结构(刷到此文章的同行不要笑话我的表结构,这是我自己练习写个小项目用的,对设计表的思想完全是空白)

from django.db import models

# Create your models here.

class work_users(models.Model):
    """值班人员动作表"""
    user_id = models.AutoField(primary_key=True, help_text="用户id")
    department = models.CharField(max_length=10, help_text="部门")
    job = models.CharField(max_length=20, help_text="职务")
    name = models.CharField(max_length=20, help_text="值班人员名字")
    phone = models.CharField(max_length=11, help_text="电话")
    mail = models.CharField(max_length=30, help_text="邮箱")
    user_create_date = models.DateTimeField(auto_now_add=True, help_text="创建用户时间")
    user_update_date = models.DateTimeField(auto_now=True, help_text="更新用户时间")

    class Meta:
        db_table = "work_users"


class dates(models.Model):
    """一年的日期表"""
    date_id = models.AutoField(primary_key=True, help_text="排班id")
    date = models.DateTimeField(help_text="日期")
    week = models.IntegerField(help_text="周")
    date_cn = models.CharField(max_length=20, help_text="日期,中文")
    week_cn = models.CharField(max_length=5, help_text="周,中文")

    class Meta:
        db_table = "dates"


class schedulers_work(models.Model):
    """排班表"""
    _id = models.AutoField(primary_key=True, help_text="不做逻辑使用")
    date_id = models.IntegerField(help_text="排班id")
    first_user_id = models.IntegerField(help_text="第一值班人,关联用户id")
    tow_user_id = models.IntegerField(help_text="第二值班人,关联用户id")

    class Meta:
        db_table = "schedulers_work"

 然后执行下面两个命令创建表到数据库中。python manage.py makemigrations 是创建数据库迁移文件,执行完此命令后,会在apps\workduty\migrations 目录中生成一个文件;python manage.py migrate是将迁移文件的表结构同步到数据库中。

python manage.py makemigrations
python manage.py migrate

ps: 如果执行 apps\workduty\migrations 时报错 AttributeError: 'str' object has no attribute 'decode' ,我修改了一个文件就没问题了,话说是 django版本的一个 bug 

Django之创建项目

将这个位置的 decode 改成 encode 即可

Django之创建项目

执行完毕没有报错的话,再查看数据库,会看到表已经生成了。

Django之创建项目

六、测试django项目是否能正常启动

在 apps\workduty\views.py 文件中写个 HttpResponse 测试一下

from django.http import HttpResponse


def Index(request):
    return HttpResponse("首页测试")

在管理目录 schaduler_works\urls.py 中写上路由

from django.contrib import admin
from django.urls import path
from apps.workduty import views as apps_workduty

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', apps_workduty.Index),
]

启动 django 项目 

python manage.py runserver 0.0.0.0:8000

Django之创建项目

然后在浏览器访问一把

Django之创建项目

访问到 apps/workduty 应用没有问题,那么现在基础的django目录结构规划就已经完成了。之后再有新的应用,直接创建在 apps 中即可。

上一篇:CI/CD笔记-Jenkins的安装部署


下一篇:Power Apps Code Component 开发记录