1. 程式人生 > >【Django2x 學習筆記 05】面向api(模板使用者請跳過),操作已有資料庫的查詢、增加、修改

【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

資料庫結構如下(已有資料庫):

註冊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

-

2. 測試執行結果:

用GET方法測一下資料查詢 http://localhost:8080/blog/show/

-

博文拓展:

連線資料庫: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