写在开头
本篇文章的受众人群是有Django和Mysql数据库基础的码农们
环境创建
创建合适版本的虚拟环境, 如果不知道什么是虚拟环境,以及如何创建, 可以先去看这篇文章
创建项目
django-admin startproject server
(这里的server是项目名称)
执行完上面命令之后,你的目录中会多一个server文件夹,这就是你的Django项目目录
执行 pip install django 命令
cd server
python manage.py runserver
在浏览器访问 http://127.0.0.1:8000/ ,看到如下界面表示成功创建项目
然后使用合适的编译器打开server项目, 这里我使用的是Pycharm
Pycharm下载链接https://www.jetbrains.com/pycharm/download/?section=mac
创建todoList应用模块
python manage.py startapp todoList
1 在todoList下新建二级目录文件 urls.py
from django.urls import path
urlpatterns = []
同时将该二级路由加入到主路由中
from django.urls import path, include
from todoList import urls as todo_urls
urlpatterns = [
...
path("todo/", include(todo_urls),
]
2 更改setting.py的配置 (server/settings.py)
更改时区
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False
USE_I18N = True
USE_L10N = True
添加应用
这里不添加todoList应用,后面更新同步数据表会没有效果,因为框架不会去检测没有写在INSTALLED_APPS中的models的变动
INSTALLED_APPS = [
...
'todoList'
]
数据库连接配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'Django_demo', # 自己已经建好的数据库名
'USER': 'root',
'PASSWORD': '******', # 这里填入自己的连接数据库密码
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
3 在models.py下定义todoList数据表. (server/todoList/models.py)
from django.db import models
from datetime import datetime
# Create your models here.
class TodoList(models.Model):
title = models.CharField(max_length=32, verbose_name='任务标题')
completed = models.IntegerField(default=0, verbose_name='是否完成 1完成 0未完成')
is_delete = models.IntegerField(default=0, verbose_name='删除标志位 1删除 0未删除')
create_time = models.DateTimeField(default=datetime.now(), verbose_name='任务创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name='最后更新时间')
class Meta:
db_table = 'TodoList'
verbose_name = "TodoList"
verbose_name_plural = verbose_name
做到这一步还不够,我们要将刚创建的这个数据表同步更新到数据库中去
python manage.py makemigrations
python manage.py migrate
此时观察数据库,就会有一个叫做TodoList的数据表存在了
下面的所有涉及到操作数据库的方法不会直接写sql语句,而是通过ORM的方式
如果不知道什么是ORM,以及如何使用ORM,可以去看这篇文章
4 实现todoList的增删改查方法 (server/todoList/views.py)
from django.shortcuts import render
from django.http import HttpResponse
from todoList.models import TodoList
import json
# Create your views here.
BaseResponseData = {
'code': 200,
'message': '',
'data': None
}
def create_todo_view(request):
if request.method == 'POST':
todo_dict = json.loads(request.body)
title = todo_dict.get('title')
TodoList.objects.create(title=title)
BaseResponseData['message'] = '创建待办任务成功'
else:
BaseResponseData['message'] = '创建待办任务失败, 方法错误'
return HttpResponse(json.dumps(BaseResponseData))
def update_todo_view(request):
if request.method == 'POST':
todo_dict = json.loads(request.body)
id = todo_dict.get('id')
completed = todo_dict.get('completed')
title = todo_dict.get("title")
todo = TodoList.objects.get(pk=id)
todo.completed = completed
todo.title = title if title is not None and title != "" else todo.title
todo.save()
BaseResponseData['message'] = '待办任务更新成功'
else:
BaseResponseData['message'] = '待办任务更新失败, 方法错误'
return HttpResponse(json.dumps(BaseResponseData))
def delete_todo_view(request):
if request.method == 'DELETE':
id = request.GET.get('id')
TodoList.objects.filter(pk=id).update(is_delete=1)
BaseResponseData['message'] = '任务删除成功'
else:
BaseResponseData['message'] = '方法错误'
return HttpResponse(json.dumps(BaseResponseData))
def todo_list_view(request):
if request.method == 'GET':
todo_list = TodoList.objects.filter(is_delete=0)
todos = {
'completed': [],
'notCompleted': []
}
for todo in todo_list:
item = {
'id': todo.id,
'title': todo.title,
'completed': todo.completed
}
if todo.completed == 1:
todos['completed'].append(item)
else:
todos['notCompleted'].append(item)
BaseResponseData['data'] = todos
BaseResponseData['message'] = '查询成功'
else:
BaseResponseData['message'] = '方法错误'
return HttpResponse(json.dumps(BaseResponseData))
def delete_all_completed_todo(request):
if request.method == "DELETE":
TodoList.objects.filter(completed=1).update(is_delete=1)
BaseResponseData['message'] = '已完成任务清除成功'
else:
BaseResponseData['message'] = '方法错误'
return HttpResponse(json.dumps(BaseResponseData))
5 补全与方法对应的urls (server/todoList/urls.py)
from django.urls import path
from todoList import views as todo_views
urlpatterns = [
path("create", todo_views.create_todo_view),
path('update', todo_views.update_todo_view),
path("delete", todo_views.delete_todo_view),
path('list', todo_views.todo_list_view),
path("clearCompleted", todo_views.delete_all_completed_todo),
]
6 测试接口 (这里我使用的接口测试工具是Apifox)
写在最后
这个是使用基础的Django语法实现的,后续我会持续更新新的写法( 使用 Django Rest FrameWork)