环境搭建
  • 安装python并配置环境变量

  • 安装插件python、django

  • pip 安装 django

1
pip install django

注:遇到升级情况

1
python -m pip install --upgrade pip
初始化项目
  • 初始化
1
django-admin startproject 项目名
  • 创建app文件夹
1
python manage.py startapp main
  • 创建虚拟机环境
1
python -m venu venv

设置解释器为venv中的python.exe(也可以不设置)

  • 启动项目
1
python manage.py runserver
增删改查(简单实现)
  • 引入插件
1
pip install mysqlclient
  • 配置数据库连接 settings.py
1
2
3
4
5
6
7
8
9
10
11
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'python',
'USER': 'root',
'PASSWORD': '123456',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {'charset': 'utf8mb4'},
}
}
  • 引入apps settings.py 如应用程序名称为main
1
2
3
4
5
6
7
8
9
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'main'
]
  • 应用程序配置models(对应数据库的表字段)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from django.db import models

class First(models.Model):

# id 需要加上primary_key属性
id = models.CharField(max_length=30, primary_key=True)
message = models.CharField(max_length=30)

def __str__(self):
return f"{self.id} {self.message}"

# 定义表名
class Meta:
db_table = 'first'


class Second(models.Model):

# id 需要加上primary_key属性
id = models.CharField(max_length=30, primary_key=True)
first_id = models.CharField(max_length=30)
message = models.CharField(max_length=30)

def __str__(self):
return f"{self.id} {self.first_id} {self.message}"

# 定义表名
class Meta:
db_table = 'second'
  • 配置接口
1
2
3
4
5
6
7
8
urlpatterns = [
path('saveFirstData/', views.saveFirstData, name='saveFirstData'),
path('getFirstData/', views.getFirstData, name='getFirstData'),
path('postFirstData/', views.postFirstData, name='postFirstData'),
path('updateFirstData/', views.updateFirstData, name='updateFirstData'),
path('deleteFirstData/', views.deleteFirstData, name='deleteFirstData'),
path('getRelatedSelect/', views.getRelatedSelect, name='getRelatedSelect'),
]
  • 配置方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
from django.http import HttpResponse
from .models import First, Second
import json
from django.http import HttpResponseBadRequest, JsonResponse
from django.db import connections


# 增加数据
def saveFirstData(request):
firstSave = First(id='3', message='33333')
firstSave.save()
return HttpResponse("新增成功")


# 修改数据
def updateFirstData(request):
firstDataForUpdate = First.objects.get(id='3')
firstDataForUpdate.message = '44444'
firstDataForUpdate.save()
return HttpResponse("修改成功")


# 查询数据库post
def postFirstData(request):
# 处理post
if request.method == 'POST':

# form-data拿数据方式
# id = request.POST.get("id")
# message = request.POST.get("message")
# response_data = {'id': id, 'message': message}
# return JsonResponse(response_data)

# json拿数据方式
try:
data = json.loads(request.body.decode('utf-8'))
except json.JSONDecodeError:
return HttpResponseBadRequest("Invalid JSON data.")
id = data.get('id')
message = data.get('message')
response_data = {'id': id, 'message': message}
return JsonResponse(response_data)
else:
return HttpResponseBadRequest("Only POST requests are allowed.")


# 查询数据库get
def getFirstData(request):

# 查询全部
firstInfos = First.objects.all()
for firstInfo in firstInfos:
print(str(firstInfo))

# 获取get请求的参数
id = request.GET.get('id', '')
message = request.GET.get('message', '')

# 带参数查询(返回多个)
firstInfoTwos = First.objects.filter(message=message)
for firstInfoTwo in firstInfoTwos:
print(str(firstInfoTwo))

# 带参数查询(返回单个)
firstInfoThree = First.objects.get(message=message)
print(str(firstInfoThree))

# 带参数查询(不包含)
firstInfoFours = First.objects.exclude(id=id)
for firstInfoFour in firstInfoFours:
print(str(firstInfoFour))

return HttpResponse("查询成功")


# 删除数据
def deleteFirstData(request):
firstDataForUpdate = First.objects.get(id='3')
firstDataForUpdate.delete()
return HttpResponse("删除成功")

# 执行原生sql
def getRelatedSelect(request):
sql = "select `second`.* from `first` left join `second` on `first`.id = `second`.first_id "
with connections['default'].cursor() as cursor:
cursor.execute(sql)
result = cursor.fetchall()
for item in result:
print(str(item))
return HttpResponse("关联查询成功")