Django开发RESTful API实现增删改查(入门级)


Posted in Python onMay 10, 2021

数据库中有user表如下:

Django开发RESTful API实现增删改查(入门级)

新建一个Django项目:

django-admin.py startproject myDjango<project_name>

目录介绍

myDjango/
├── manage.py  # 管理文件
└── myDjango # 项目目录
    ├── __ init __.py
    ├── settings.py  # 配置文件
    ├── urls.py  # 路由 --> URL和函数的对应关系
    └── wsgi.py  # runserver命令就使用wsgiref模块做简单的web server

使用rest_framework

在setting.py中添加:

INSTALLED_APPS = [
   ...
   'rest_framework'
]

连接MySQL数据库

在setting.py中设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'bigdatatest',
        'USER': 'root',
        'HOST': '127.0.0.1',
        'PASSWORD': '1009',
        'PORT': 3306,
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}

在__init__.py中添加:

import pymysql
pymysql.version_info = (1, 4, 13, "final", 0)
pymysql.install_as_MySQLdb()

新建app

python manage.py startapp users<app_name>

目录介绍:

users/
├── migrations  # 用于在之后定义引用迁移功能
   ├── __ init __.py
├── __ init __.py
├── admin.py  # 管理站点模型的声明文件,默认为空
├── apps.py  # 应用信息定义文件。在其中生成了类Appconfig,类用于定义应用名等Meta数据
├── models.py  # 添加模型层数据类的文件
├── tests.py  # 测试代码文件
└── views.py  # 定义URL响应函数

在setting.py中添加:

INSTALLED_APPS = [
    ...
    'users'
]

把数据库中的表生成对应的model

python manage.py inspectdb

将我们表的model拷贝到users下的models.py里

from django.db import models

class User(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=255, blank=True, null=True)
    age = models.IntegerField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'user'

创建一个序列化Serializer类,使之可以转化为,某种表现形式如json

在users目录下,创建文件serializers.py

from rest_framework import serializers
from users.models import User

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = "__all__"

数据输出

编写users下的views.py

from __future__ import unicode_literals

from rest_framework.decorators import api_view
from rest_framework.response import Response

from user.models import User
from user.serializers import UserSerializer

@api_view(['GET'])
def getlist(request):  # 获取全部数据
    if request.method == 'GET':
        users = User.objects.values('id', 'name', 'age').distinct()
        serializer = UserSerializer(users, many=True)
        return Response(serializer.data)

@api_view(['GET'])
def getlistpic(request):  # 根据id查找单条数据
    id = request.GET['id']
    if id is not None:
        users = User.objects.filter(id=id)
        serializer = UserSerializer(users, many=True)
        return Response(serializer.data)
    else:
        return Response(str('请传id'))

@api_view(['POST'])
def addUser(request):  # 添加数据
    ser = UserSerializer(data=request.data)
    if ser.is_valid():
       ser.save()
       return Response(ser.data)
    return Response(ser.errors)

@api_view(['GET'])
def deleteUser(request):  # 根据id添加删除
    id = request.GET['id']
    if id is not None:
        if User.objects.filter(id=id):
            User.objects.get(id=id).delete()
            return Response(str('success'))
        else:
            return Response(str('没有此id'))
    else:
        return Response(str('请传id'))

@api_view(['POST'])
def updateUser(request):  # 根据id修改数据
    if User.objects.filter(id=request.data['id']):
        user = User.objects.get(id=request.data['id'])
        ser = UserSerializer(instance=user, data=request.data)  # 注意指定参数
        if ser.is_valid():
            ser.save()
            return Response(str('success'))
        return Response(ser.errors)
    return Response(str('没有此id'))

在urls.py中设置:

from django.conf.urls import url
from users import views as users_views
urlpatterns = [
    url(r'^getlistpic', users_views.getlistpic, name='home'),
    url(r'^getlist', users_views.getlist, name='home'),
    url(r'^addUser', users_views.addUser, name='home'),
    url(r'^deleteUser', users_views.deleteUser, name='home'),
    url(r'^updateUser', users_views.updateUser, name='home')
]

启动项目:

python manage.py runserver 127.0.0.1:8000

访问结果:

Django开发RESTful API实现增删改查(入门级)

Django开发RESTful API实现增删改查(入门级)

源码地址: myDjango

参考:
创建第一个Django项目
Python用Django写restful api接口

到此这篇关于Django开发RESTful API实现增删改查(入门级)的文章就介绍到这了,更多相关Django RESTful API增删改查内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中字典映射类型的学习教程
Aug 20 Python
python爬虫之BeautifulSoup 使用select方法详解
Oct 23 Python
python 读写中文json的实例详解
Oct 29 Python
python实现简单淘宝秒杀功能
May 03 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
python高阶爬虫实战分析
Jul 29 Python
python实现统计文本中单词出现的频率详解
May 20 Python
python简单区块链模拟详解
Jul 03 Python
Python实现串口通信(pyserial)过程解析
Sep 25 Python
利用matplotlib为图片上添加触发事件进行交互
Apr 23 Python
Opencv求取连通区域重心实例
Jun 04 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 Python
Python中X[:,0]和X[:,1]的用法
May 10 #Python
Python Django搭建文件下载服务器的实现
详解python的内存分配机制
May 10 #Python
python-for x in range的用法(注意要点、细节)
May 10 #Python
Django显示可视化图表的实践
python 中[0]*2与0*2的区别说明
May 10 #Python
Python超简单容易上手的画图工具库推荐
You might like
PHP容器类的两种实现方式示例
2019/07/24 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
JS在textarea光标处插入文本的小例子
2013/03/22 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
详解webpack+express多页站点开发
2017/12/22 Javascript
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
Vue3配置axios跨域实现过程解析
2020/11/25 Vue.js
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
Python遍历目录并批量更换文件名和目录名的方法
2016/09/19 Python
python实现远程控制电脑
2019/05/23 Python
python内存动态分配过程详解
2019/07/15 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
python中有关时间日期格式转换问题
2019/12/25 Python
Python字典添加,删除,查询等相关操作方法详解
2020/02/07 Python
Python @property原理解析和用法实例
2020/02/11 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
学校安全责任书
2014/04/14 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
无犯罪记录证明范本
2014/09/15 职场文书
合作合同协议书范本
2015/01/27 职场文书
产品质量保证书范本
2015/02/27 职场文书
幼儿园辞职信
2015/05/13 职场文书
学会Python数据可视化必须尝试这7个库
2021/06/16 Python