【Django2x 学习笔记 05】面向api(模板使用者请跳过),操作已有数据库的查询、增加、修改

根据博客https://blog.csdn.net/itas109/article/details/80898943 才知道如何查找已有数据库字段。

Django官方文档https://docs.djangoproject.com/zh-hans/2.0/写的真烂,愣是没找到如何操作已有数据库。给我摆个用代码创建数据库表,智障!

-

基于Python3.7、Django2.1.3、win10_1809。

假设创建一个Django的web项目mysite:

$ django-admin startproject mysite

-

开启服务 python manage.py runserver 8080

连续按 Crl+C 可以退出服务

本文完整代码下载:https://github.com/fyonecon/zh-CN_IT_learning/blob/master/%E4%BB%A3%E7%A0%81%E7%B1%BB%E5%88%86%E4%BA%AB/Django-%E6%93%8D%E4%BD%9C%E6%95%B0%E6%8D%AE%E5%BA%93-%E6%93%8D%E4%BD%9Cpath%E8%B7%AF%E7%94%B1_mysite.7z

------正文开始-------

1. 新建一个Djano模块,创建必要文件:

1.0)cmd端敲创建一个blog模块:

$ python manage.py startapp blog

1.1)mysite目录下的settings.py里注册'blog':

INSTALLED_APPS = [
    。。。。。
    。。。。

    # 经过实验不写无所谓,连接数据库才会用到
    'blog',
]

1.2)mysite目录下的settings.py里填入数据库信息:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 或者使用 mysql.connector.django
        'NAME': 'bless',
        'USER': '',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

1.3)mysite目录下的urls.py注册主路由:

from django.contrib import admin
from django.urls import include, path
from blog import views

# python manage.py runserver 8080

urlpatterns = [
    path('admin/', admin.site.urls),

    # blog
    path('blog/', include('blog.urls')),


]

1.4)配置必要扩展:

$ pip install --user pymysql

在blog目录的___init_.py填入:

import pymysql
pymysql.install_as_MySQLdb()
$ pip install --user Pillow

 

2)在blog目录新建一个urls.py文件,并填入次路由:

from django.urls import path

from . import data

urlpatterns = [
    path('', data.index, name='index'),

    path('show/', data.show, name='show'),
    path('add/', data.add, name='add'),
    path('update/', data.update, name='update'),

]

3)在blog文件夹下的models.py里面声明所要操作的表的参数:

from django.db import models
# Create your models here.


class Music(models.Model):  # 连接数据库中的表,并声明数据库字段

    # 声明参数,可以与数据库的最大长度不同,建议将数据库中所有字段都声明
    id = models.IntegerField(primary_key=True)
    music_name = models.TextField(max_length=100)
    music_src = models.CharField(max_length=500)
    adm = models.CharField(max_length=20)
    create_time = models.IntegerField(max_length=20)

    class Meta:
        managed = True  # 管理每个表的创建,修改和删除
        db_table = 'td_music'  # 表

        pass

    pass

【Django2x 学习笔记 05】面向api(模板使用者请跳过),操作已有数据库的查询、增加、修改

数据库结构如下(已有数据库):

【Django2x 学习笔记 05】面向api(模板使用者请跳过),操作已有数据库的查询、增加、修改

【Django2x 学习笔记 05】面向api(模板使用者请跳过),操作已有数据库的查询、增加、修改

注册models,此文件生成在目录migrations下:

$ python manage.py makemigrations

$ python manage.py migrate

 

4)在blog目录新建一个data.py文件,并填入数据库的增,改,查代码,完成如下,操作完成后,以接口 的形式传回参数:

from django.http import HttpResponse
from .models import Music
import json


# python manage.py runserver 8080
def index(request):
    return HttpResponse('路由运行正常')
    pass


def show(request):  # 查询数据
    res = Music.objects.all().order_by('-id').values('music_name', 'adm')
    if res:
        back = {
            'state': 1,
            'msg': '获取成功',
            'content': list(res),  # 将查询结果数组化
        }
        pass
    else:
        back = {
            'state': 0,
            'msg': '获取失败',
            'content': '',
        }
        pass

    return HttpResponse(json.dumps(back, ensure_ascii=False), content_type='application/json; charset=utf-8')
    pass


def add(request):  # 新增数据

    res = Music(music_name='name3', music_src='www.1111.com/1.mp3', adm='admin1', create_time='2018').save()

    back = {
        'state': 1,
        'msg': '添加成功',
        'content': str(res),
    }

    return HttpResponse(json.dumps(back, ensure_ascii=False), content_type='application/json; charset=utf-8')
    pass


def update(request):  # 更新数据

    res = Music.objects.filter(id=20).update(music_name='name20', adm='admin21')

    if res == 1:
        back = {
            'state': 1,
            'msg': '更新完成',
            'content': str(res),
        }
        pass
    else:
        back = {
            'state': 0,
            'msg': '更新失败',
            'content': str(res),
        }
        pass

    return HttpResponse(json.dumps(back, ensure_ascii=False), content_type='application/json; charset=utf-8')
    pass

【Django2x 学习笔记 05】面向api(模板使用者请跳过),操作已有数据库的查询、增加、修改

-

2. 测试运行结果:

用GET方法测一下数据查询 http://localhost:8080/blog/show/

【Django2x 学习笔记 05】面向api(模板使用者请跳过),操作已有数据库的查询、增加、修改

-

博文拓展:

连接数据库:https://blog.csdn.net/itas109/article/details/80898943

路由编写:https://blog.csdn.net/weixin_41827162/article/details/84500537

查询数据:https://blog.csdn.net/Fe_cow/article/details/80669146

多表查询,复杂查询:https://www.cnblogs.com/yangzhizong/p/9629597.html