1. 安装Django
Django 4.x的版本只支持MySQL8及以上的版本了。如果mysql版本比较老,需要使用老版本的django。此处指定django版本为3.2.20
shell
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django==3.2.20
2. 创建项目
-
创建项目
-
在指定目录使用命令行创建项目 django01
shelldjango-admin startproject django01
-
-
创建app
-
在项目内manage.py的同级目录使用命令行创建 app01
shellpython manage.py startapp app01
-
-
注册app
-
查看 app01 --> apps.py
pythonfrom django.apps import AppConfig class App01Config(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'app01'
-
在 django01 --> settings.py 的INSTALLED_APPS中注册app,增加app01
pythonINSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01.apps.App01Config' # 对应app01的路径 ]
-
-
编写url和视图函数的映射关系(路由)
-
在django01 --> urls.py 中新增path,对应到app01 views.py的路径
pythonfrom django.contrib import admin from django.urls import path from app01 import views urlpatterns = [ # path('admin/', admin.site.urls), path('index/', views.index), ]
-
在 app01 --> views.py中创建函数 index
pythonfrom django.http import HttpResponse from django.shortcuts import render # Create your views here. def index(request): return HttpResponse("HelloWorld")
-
-
启动项目
-
方法一:命令行启动
shellpython manage.py runserver
-
方法二:pycharm启动
-
-
web访问测试 http://localhost:8000/index/
3. orm操作MySQL
-
安装mysqlclient
shellpip install -i https://pypi.tuna.tsinghua.edu.cn/simple mysqlclient
-
连接数据库
在django01 --> settings.py 中配置
python# Database # https://docs.djangoproject.com/en/4.2/ref/settings/#databases # DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': BASE_DIR / 'db.sqlite3', # } # } DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'gotest', # 库名 'USER': 'root', 'PASSWORD': 'uGS7jx9sYU7nt0c', 'HOST': '192.168.7.228', 'PORT': 3306, } }
-
操作表
-
创建表
-
在app01 --> models.py 中创建类 UserInfo (建表的时候表名为app01_userinfo, 会自动添加主键id)
pythonfrom django.db import models class UserInfo(models.Model): name = models.CharField(max_length=32) password = models.CharField(max_length=64) age = models.IntegerField()
-
在 manage.py 同级目录执行命令建表
shellpython manage.py makemigrations python manage.py migrate
-
-
修改表
-
删除列:将对象内的字段注释或者删掉,然后执行建表命令
-
新增列:由于已存在的列中可能有数据,所以新增列必须执行对应的数据。然后再执行建表命令
python# 列默认值为2 data1 = models.IntegerField(default=2) # 默认值为空 data2 = models.IntegerField(null=True, blank=True)
-
-
CURD
pythonform app01 import models # 新增 models.UserInfo.objects.create(name="小赵", password="123", age=20) models.UserInfo.objects.create(name="小钱", password="123", age=20) models.UserInfo.objects.create(name="小孙", password="123", age=20) # 删除 models.UserInfo.objects.filter(id=3).delete() # 查询 # 查所有 # data_list 是QuerySet类型 data_list = models.UserInfo.objects.all() for obj in data_list: print(f"{obj.name}, {obj.password}, {obj.age}") # 查一行 obj = models.UserInfo.objects.filter(id=1).first() print(obj.id) # 改 models.UserInfo.objects.filter(id=1).update(password="999")
-
外键
使用django自动创建表时,如果是外键,在对象中需要做特殊处理
python""" 1. to 表示与哪张表关联 2. to_field 表示关联的字段 3. 返回参数是depart,创建表时,外键字段会定义为depart_id 4. 需要配置on_delete属性:当另一张表被删除时,对应有两种处理(级联删除、置空) """ # 级联删除 depart = models.ForeignKey(to="Department", to_fields="id", on_delete=models.CASCADE) # 置空 # depart = models.ForeignKey(to="Department", to_fields="id", null=True, blank=True, on_delete=models.SET_NULL)
-
choices约束
python""" 1. verbose_name: 字段的备注 2. SmallIntegerField: 对应数据表的tinyint 3. 配置choices后,数据表存储的值是1 和 2 """ gender_choices = ( (1, "男"), (2, "女"), ) gennder = models.SmallIntegerField(verbose_name="性别", choices=gender_choices)
-