django学习手记(二)基本步骤一
原创这里写自定义目录标题
选择一个路径存放
进入所在路径 ,输入django-admin startproject project
一 、配置数据库
在project\project目录下
注意:django默认是sqlite
1、python3安装的是pymysql
2、在__init__.py文件中写入两行代码
import pymysql
pymysql.install_as_MySQLdb()
3、在settings.py中,通过DATABASES配置下面代码
DATABASES = {
default: {
ENGINE: django.db.backends.mysql,
NAME: sunck, #你的数据库名称
USER: root, #你的数据库用户名
PASSWORD: 123456, #你的数据库密码
HOST: , #你的数据库主机,留空默认为localhost
PORT: 3306, #你的数据库端口
}
}
4、创建应用
-
在一个项目中可以创建多个应用,每个应用进行一种业务处理
-
打开黑屏终端进入D:\program\python3\Django_learning\project 目录下,输入tree . /F
得到卷 新加卷 的文件夹 PATH 列表 卷序列号为 087B-F38B D:PROGRAMPYTHON3DJANGO_LEARNINGPROJECT │ manage.py │ └─project asgi.py settings.py urls.py wsgi.py init.py
-
接下来输入python manage.py startapp firstapp回车
遇到一下问题
File “C:\Users\DELL\AppData\Local\Programs\Python\Python37\lib\site-packages\django-3.0.4-py3.7.egg\django\db\backends\mysql\base.py”, line 37, in
raise ImproperlyConfigured(‘mysqlclient 1.3.13 or newer is required; you have %s.’ % Database. version )
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
在C:\Users\DELL\AppData\Local\Programs\Python\Python37\Lib\site-packages\Django-3.0.4-py3.7.egg\django\db\backends\mysql目录下找到base.py,将里面两行代码像我这样注释掉
继续输入python manage.py startapp firstapp回车,和下图一样则表示改成功了
在project目录下输入tree . /F,得到下图
│ manage.py
│
├─firstapp
│ │ admin.py
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ views.py
│ │ __init__.py
│ │
│ └─migrations
│ __init__.py
│
└─project
│ asgi.py
│ settings.py
│ urls.py
│ wsgi.py
│ __init__.py
│
└─__pycache__
settings.cpython-37.pyc
urls.cpython-37.pyc
__init__.cpython-37.pyc
4.firstapp目录说明
- admin.py 站点配置
- models.py 模型
- views.py 视图
5、激活应用
在settings.py文件中,将firstapp应用加入到INSTALLED_APPS选项中
INSTALLED_APPS = [
django.contrib.admin,
django.contrib.auth,
django.contrib.contenttypes,
django.contrib.sessions,
django.contrib.messages,
django.contrib.staticfiles,
firstapp#加入的应用名
]
6、定义模型
1、有一个数据表,就对应有一个模型
2、在models.py文件中定义模型,是为了与数据库进行一个交互
在firstapp文件下models.py中定义模型-------引入from django.db import models
--------模型类 要继承models.Model类
类里面的属性对应表里面的字段
3、在 models.py 中定义
from django.db import models
# Create your models here.
class Grades(models.Model):
gname = models.CharField(max_length=20)
gdate = models.DateTimeField()
gnum = models.IntegerField()#人数
isDelete =models.BooleanField(default=False)#是否删除
class Students(models.Model):
sname = models.CharField(max_length=20)
sgender = models.BooleanField(default=False)#性别
sage = models.IntegerField()#年龄
scontend =models.CharField(max_length=20)#学生简介
isDelete =models.BooleanField(default=False)#是否删除
#关联外键
sgrade = models.ForeignKey("Grades")
4、不需要定义主键,在生成时自动添加,并且值为自动增加的
7、在数据库中生成数据表
第一步生成迁移文件
在migrantions目录下生成一个迁移文件,此时数据库还没有生成数据表 ,可以在第一步结束之后,去sunck数据库下看看有没有数据表
1、(1)在project目录下,执行一个命令 python manage.py makemigrations
执行出错:
File "D:programpython3Django_learningprojectfirstappmodels.py", line 17, in Students
sgrade = models.ForeignKey("Grades")
TypeError: __init__() missing 1 required positional argument: on_delete
(2) 修改代码:
定义外键的时候需要加上 on_delete=;
sgrade = models.ForeignKey("Grades",on_delete=models.CASCADE)
django 升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常:
TypeError: init() missing 1 required positional argument: ‘on_delete’
由于多对多(ManyToManyField)没有 on_delete 参数,所以以上只针对外键(ForeignKey)和一对一(OneToOneField)
on_delete各个参数的含义如下:
on_delete=None, # 删除关联表中的数据时,当前表与其关联的field的行为
on_delete=models.CASCADE, # 删除关联数据,与之关联也删除
on_delete=models.DO_NOTHING, # 删除关联数据,什么也不做
on_delete=models.PROTECT, # 删除关联数据,引发错误ProtectedError
# models.ForeignKey(关联表, on_delete=models.SET_NULL, blank=True, null=True)
on_delete=models.SET_NULL, # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空,一对一同理)
# models.ForeignKey(关联表, on_delete=models.SET_DEFAULT, default=默认值)
on_delete=models.SET_DEFAULT, # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理)
on_delete=models.SET, # 删除关联数据,
a. 与之关联的值设置为指定值,设置:models.SET(值)
b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
2、(1)在project目录下,执行一个命令
python manage.py makemigrations
出现警告:
C:UsersDELLAppDataLocalProgramsPythonPython37libsite-packagespymysqlcursors.py:170: Warning: (3135, "NO_ZERO_DATE, NO_ZERO_IN_DATE and ERROR_FOR_DIVISION_BY_ZERO sql modes should be used with strict mode. They will be merged with strict mode in a future release.")
result = self._query(query)
Migrations for firstapp:
firstappmigrations
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除