Python 之 Django框架 - 纯数据接口篇
上一篇我们介绍了django框架的基础内容,现在我们介绍如何用django框架来制作后端API接口,可连接数据库增删改查,供前端使用。
1.安装django
pip install Django
验证是否安装成功:
python -m django --version
2.创建django项目:
django-admin startproject 项目名称
创建完成后目录结构:
$ cd HelloWorld/
.
|-- HelloWorld 项目的容器
| |-- __init__.py #一个空文件,告诉 Python 该目录是一个 Python 包
| |-- asgi.py #一个 ASGI 兼容的 Web 服务器的入口,以便运行你的项目
| |-- views.py #添加的视图文件
| |-- settings.py #该 Django 项目的设置/配置
| |-- urls.py #该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
| `-- wsgi.py #一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
`-- manage.py #一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
启动django项目:
python manage.py runserver # 端口8000,被占用则无法启动
3.创建虚拟环境
在项目路径下输入cmd,并输入python -m venv venv创建虚拟环境,激活虚拟环境,再安装django模块。
pip install Django
4.创建APP
1.执行命令:
django-admin startapp 名称(app)
2.在settings.py 中找到INSTALLED_APPS添加app:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app.apps.AppConfig', # 添加此项
)
5.数据接口API
1.删除views.py,在app目录下创建views目录:用来存储不同的数据接口。
2.比如创建关于用户user的接口,可在views目录下创建user.py:
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt # 可以被跨域访问
def get_user_info(request):
# request 是调用数据接口前端传递过来的参数,可做其他逻辑处理
post_data = json.loads(request.body)
# 获取用户信息
user_data = dict()
user_data ['name'] = '小明'
# 返回数据,可供前端使用
return JsonResponse(user_data , safe=False)
JsonResponse(data, safe=False)
data :
这是 JsonResponse 的主要参数,用于传递要转换为 JSON 的数据。这通常是一个字典或任何可以序列化为 JSON 的对象。
safe (默认为 True):
这个参数决定了是否应检查数据是否只包含基本数据类型(字典、列表、字符串、int、float、True、False 和 None)。
如果 safe 为 True,那么数据只能包含上述的基本数据类型。如果包含其他类型(如自定义类、Django 模型等),则会引发 TypeError。
如果 safe 为 False,则不会进行这种检查,允许您传递任何可以序列化为 JSON 的对象(但这仍然取决于对象的 json 方法或是否有合适的 JSON 编码器)。
3.在urls.py中引入访问接口路径:
通过本地或者服务器地址+user/info/,即可调用user下的get_user_info函数并返回用户信息,同理也可通过数据接口传参来修改用户信息并存储在数据库中。
from django.urls import path
from app.views import user # 引入user文件
urlpatterns = [
path('user/info/',user.get_user_info)
]
返回数据:
6.数据库获取和存储数据(mysql )
1.创建 MySQL 数据库:
ORM 无法操作到数据库级别,只能操作到数据表,所以需要手动创建个数据库先;我是用Navicat Premium新建连接,并创建helloworld本地Mysql数据库的,其他方式创建也行。
2.安装mysqlclient模块:
pip install mysqlclient
3.在 settings.py 文件中找到 DATABASES 配置项,将其信息修改为:
DATABASES = {
'default':
{
'ENGINE': 'django.db.backends.mysql', # 数据库引擎mysql,可连接其他数据库
'NAME': 'helloworld', # 数据库名称
'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1
'PORT': 3306, # 端口
'USER': 'root', # 数据库用户名
'PASSWORD': '123456', # 数据库密码
}
}
4.在app下的models.py中创建数据表:
from django.db import models
class User(models.Model): # 创建了user表里面有name字段来存储用户名字
name = models.CharField(verbose_name="用户名", max_length=32)
具体的数据类型:Django models 常用数据类型
5.上传数据表和更新变动:
每次我们数据表有改动,都需要执行下面两条命令,我们就可以看到在本地数据库helloworld中新增了很多表,其中就有app_user用户表
python manage.py makemigrations 或 python manage.py makemigrations app
python manage.py migrate 或 python manage.py migrate app
6.数据表的增删改查:
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from app import models
from django.db.models import Q
from django.db.models import F
@csrf_exempt
def get_user_info(request):
# request 是调用数据接口前端传递过来的参数,可做其他逻辑处理
post_data = json.loads(request.body)
# 新增create
# models.User.objects.create(name='小明')
# 获取全部all()或过滤条件filter
# user_info = models.User.objects.values().all()
# user_info = models.User.objects.filter(name='小王').values().first()
# 更改update
# models.User.objects.update(name='小红')
# models.User.objects.filter(id=1).update(name='小明')
# 删除delete
# models.User.objects.delete()
# models.User.objects.filter(id=1).delete()
# Q 或
# models.Classes.objects.values().filter(
# Q(id__gte=3) | Q(name='nick')) # select * from classes where id>=3 or name='nick'
# models.Classes.objects.values().filter(
# (Q(id__gte=3) | Q(name='nick')) & Q(age=19)) # select * from classes where (id>=3 or name='nick') and age=19
# F 当前的值
# models.Classes.objects.update(age=F('age') + 1) # 将每个人的年龄加1
return JsonResponse('成功', safe=False)
比如调用models.User.objects.create(name=‘小明’)去创建对应数据:
具体的数据库查询方式:Python+django的ORM查询
至此,完整的django后端纯数据接口流程如上(简洁),前端请求格式如:http://127.0.0.1:8000/user/info/,地址+接口名称,下一篇 Python 之 Django框架 - 后台管理篇,我们将讲解连接数据库后,如何使用admin后台去可视化管理数据表中的数据!