实战篇 TodoList (Django 后端)

写在开头

本篇文章的受众人群是有Django和Mysql数据库基础的码农们

环境创建

创建合适版本的虚拟环境, 如果不知道什么是虚拟环境,以及如何创建, 可以先去看这篇文章

Django前置准备-环境搭建-CSDN博客文章浏览阅读11次。虚拟环境是什么,以及为什么需要使用虚拟环境,以及它的搭建和使用详细过程https://blog.csdn.net/m0_56825253/article/details/133752367

创建项目

 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下载链接icon-default.png?t=N7T8https://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,可以去看这篇文章

Django入门——ORM (简单数据表)-CSDN博客大家是不是从todoList过来的,在todoList案例中,我们说到,所有涉及到的数据库的操作,你不会看到任何一句SQL语句,取而代之的是ORM,这个ORM具体是什么呢?所谓ORM,即(Object-Relationl Mapping), 它是关系型数据库和对象的一种映射关系,这里说到了两个名词,一是关系型数据库,在todoList案例中指的是Mysql数据库;二是对象,那么这个对象具体指代的是什么呢?带着这个疑问🤔️, 耐心往下看.https://blog.csdn.net/m0_56825253/article/details/134707165?spm=1001.2014.3001.5502

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)

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值