Django边学边记—Django3.2新建项目简易流程

 一.准备虚拟环境

1)安装 virtualenv

pip install virtualenv

2)virtualenvwrapper

pip install virtualenvwrapper 
(windows 下 为:pip install virtualenvwrapper-win)

备注:这里我在阿里云服务器上安装virtualenvwrapper的时候报错

 

 

 解决办法:先安装以下2个包,即可解决

sudo pip install-i https://pypi.tuna.tsinghua.edu.cn/simple pbr

sudo pip install stevedore

3)设置虚拟环境目录

ubuntu:

安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量:
1、创建目录用来存放虚拟环境

mkdir $HOME/.virtualenvs  

2、打开~/.bashrc文件,并添加如下:

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh  

3、运行

source ~/.bashrc  

windows10:

默认创建的虚拟环境位于C:\Users\username\envs,可以通过环境变量 WORKON_HOME 来定制。

通过计算机-->属性-->高级系统设置-->环境变量-->在系统变量中新建“变量名”:WORKON_HOME,变量值:“D:\envs”。

4)常用命令

常用命令:

(1)创建虚拟环境 mkvirtualenv 虚拟环境名称

(2)查看虚拟环境 lsvirtualenv或者workon

(3)进入虚拟环境 workon  虚拟环境名称

(4)退出虚拟环境 deactivate

(5)删除虚拟环境 rmvirtualenv 虚拟环境名称

  (6) 查看虚拟环境下的安装包 pip list

5)创建Django项目的虚拟环境

创建虚拟环境

在python2中,创建虚拟环境

mkvirtualenv 虚拟环境名称
例 :
mkvirtualenv py_django

在python3中,创建虚拟环境

mkvirtualenv -p python3 虚拟环境名称
例 :
mkvirtualenv -p python3 py3_django

 windows中:

C:\Users\Administrator>mkvirtualenv django01

6)为虚拟环境添加Django项目需要用到的包

pip install django
pip install pymysql

7)pip包批量导入

pip freeze > piplist.txt  #导出pip安装的所有的包

pip install -r piplist.txt  #在新的环境中安装导出的包

 


二.创建项目

1)切到要建项目的目录,用django-admin startproject XXX python manage.py startapp XXX 创建项目和app

d:\python项目>workon py_django

(py_django) d:\python项目>django-admin startproject django_01

(py_django) d:\python项目>cd django_01

(py_django) d:\python项目\django_01>python manage.py startapp bookshop

  


三.进入Pycharm

1)设置初始参数

        1>settings.py

       ① 设置 时区和语言 

        ②添加app

        ③设置数据库       

  如果不使用默认数据库,更换mysql数据库,在迁移前要进行以下操作

  在settings.py文件,更改DATABASES项,默认使用SQLite3数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'XXX',
        'USER': 'root',
        'PASSWORD': 'XXX',
        'HOST': '192.168.1.XXX',
        'PORT': '3306',
    }
}

数据库端要先建好库

mysql> create database django_01 charset = utf8;
Query OK, 1 row affected, 1 warning (0.04 sec)

 

        在项目__init__.py中加上一下语句,不然会报错       

import pymysql
pymysql.install_as_MySQLdb()

  

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?

         ④设置模板

        在项目目录建 templates目录,并将模板信息加到设置文件

 

        ⑤设置主机地址便于外部计算机访问,默认为空,也就是只有127.0.0.1 能访问        

ALLOWED_HOSTS = ['192.168.1.139']  

 2>ulrs.py  设置路由,最好在app中建一个新路由表,用于连接当前app 在主路由中导入include,加入一下代码,转向app路由,

from django.urls import path,include
 path('',include('bookshop.urls'))

  

 到这里 初步配置已经完成,可以在终端里启动服务器

(py_django) d:\python项目\django_01>python manage.py runserver

2)建模型

  • 模型类被定义在“应用/models.py”文件中
  • 模型类必须继承自Model类,位于包django.db.models中
  • 提示:对于重要数据使用逻辑删除     

 定义属性

  • Django根据属性的类型确定以下信息:
  • django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列
  • 默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key
  • 属性命名限制:
    • 不能是python的保留关键字
    • 不允许使用连续的下划线,这是由django的查询方式决定的,在第4节会详细讲解查询
  • 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:       
属性=models.字段类型(选项)

字段类型

使用时需要引入django.db.models包,字段类型如下:

  • AutoField:自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性
  • BooleanField:布尔字段,值为True或False
  • NullBooleanField:支持Null、True、False三种值
  • CharField(max_length=字符长度):字符串
    • 参数max_length表示最大字符个数,必须指定
  • TextField:大文本字段,一般超过4000个字符时使用
  • IntegerField:整数
  • DecimalField(max_digits=None, decimal_places=None):十进制浮点数
    • 参数max_digits表示总位数,必须指定
    • 参数decimal_places表示小数位数
  • FloatField:浮点数
  • DateField[auto_now=False, auto_now_add=False]):日期
    • 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false
    • 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false
    • 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误
  • TimeField:时间,参数同DateField
  • DateTimeField:日期时间,参数同DateField
  • FileField:上传文件字段
  • ImageField:继承于FileField,对上传的内容进行校验,确保是有效的图片

   选项

  • 通过选项实现对字段的约束,选项如下:
  • null:如果为True,表示允许为空,默认值是False(如果数据为空时,用NULL填充数据库,一般用不到)
  • blank:如果为True,则该字段允许为空白,默认值是False(注意,与 null 不同。 null 纯属数据库相关,而 blank 则与验证相关。如果一个字段有 blank=True,表单验证将允许输入一个空值。如果一个字段有 blank=False,则该字段为必填字段。)
  • 对比:null是数据库范畴的概念,blank是表单验证证范畴的
  • db_column:字段的名称,如果未指定,则使用属性的名称
  • db_index:若值为True, 则在表中会为此字段创建索引,默认值是False
  • default:默认值
  • primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用
  • unique:如果为True, 这个字段在表中必须有唯一值,默认值是False

   关系字段类型

  • 关系型数据库的关系包括三种类型:
    • ForeignKey:一对多,将字段定义在多的一端中
    • ManyToManyField:多对多,将字段定义在两端中
    • OneToOneField:一对一,将字段定义在任意一端中
    • 在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理,在django.db.models中包含了可选常量:

      • CASCADE级联,删除主表数据时连通一起删除外键表中数据

      • PROTECT保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据

      • SET_NULL设置为NULL,当关联的表删除时,这个字段设置为null,仅在该字段null=True允许为null时可用

      • SET_DEFAULT设置为默认值,仅在该字段设置了默认值时可用

      • SET()设置为特定值或者调用特定方法

      • DO_NOTHING不做任何操作,如果数据库前置指明级联性,此选项会抛出IntegrityError异常

                这里要注意在Django3.X 中要指定on_delete的值(根据需要设置)    

    aparten = models.ForeignKey('Areas',on_delete=models.CASCADE)

 

  • 可以维护递归的关联关系,使用'self'指定,详见“自关联”
  • 由一到多的访问语法:
    对象.模型类小写_set
  • 由一到一的访问语法
    对象.模型类小写
  • 访问关联对象的id语法
    对象.属性_id
  • 数据表的默认名称为:
    <app_name>_<model_name>
  • 在模型类中定义类Meta,用于设置元信息,如使用db_table自定义表的名字
    class Meta:
        db_table='XXXX'

  

3) 迁移

# 先创建迁移文件
(py_django) d:\python项目\django_01>python manage.py makemigrations
#执行迁移命令
(py_django) d:\python项目\django_01>python manage.py migrate

  

4)

  

  

 

 

posted @ 2021-09-07 19:35  微笑_百年  阅读(200)  评论(0编辑  收藏  举报