django学习手记(二)基本步骤一

原创
小哥 3年前 (2022-11-16) 阅读数 102 #大杂烩

这里写自定义目录标题

选择一个路径存放
进入所在路径 ,输入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、创建应用

  1. 在一个项目中可以创建多个应用,每个应用进行一种业务处理

  2. 打开黑屏终端进入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

  3. 接下来输入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
版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除