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 相关文章推荐
python3实现暴力穷举博客园密码
Jun 19 Python
由浅入深讲解python中的yield与generator
Apr 05 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
python smtplib模块实现发送邮件带附件sendmail
May 22 Python
11个Python3字典内置方法大全与示例汇总
May 13 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
Nov 05 Python
tensorflow多维张量计算实例
Feb 11 Python
Python递归调用实现数字累加的代码
Feb 25 Python
如何通过python检查文件是否被占用
Dec 18 Python
Python中的 Set 与 dict
Mar 13 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
YII使用url组件美化管理的方法
2015/12/28 PHP
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
bootstrap table实例详解
2017/01/06 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
jQuery加PHP实现图片上传并提交的示例代码
2020/07/16 jQuery
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
Python 12306抢火车票脚本
2018/02/07 Python
详解python中asyncio模块
2018/03/03 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
python 元组的使用方法
2020/06/09 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
详解Canvas事件绑定
2018/06/27 HTML / CSS
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
英国的屈臣氏:Boots博姿
2017/12/23 全球购物
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
2015/10/24 面试题
2013年保送生自荐信格式
2013/11/20 职场文书
美容院店长岗位职责
2014/04/08 职场文书
教师考核材料
2014/05/21 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
淘宝好评语句大全
2014/12/31 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书