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开发实例分享bt种子爬虫程序和种子解析
May 21 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 Python
Python使用sorted排序的方法小结
Jul 28 Python
Python中多个数组行合并及列合并的方法总结
Apr 12 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
May 11 Python
python科学计算之narray对象用法
Nov 25 Python
python FTP批量下载/删除/上传实例
Dec 22 Python
Python测试线程应用程序过程解析
Dec 31 Python
Python 在局部变量域中执行代码
Aug 07 Python
解决pip安装的第三方包在PyCharm无法导入的问题
Oct 15 Python
python 中[0]*2与0*2的区别说明
May 10 Python
仅用几行Python代码就能复制她的U盘文件?
Jun 26 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 Squid中可缓存的动态网页设计
2008/09/17 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
PHP工厂模式的日常使用
2019/03/20 PHP
JavaScript实现Sleep函数的代码
2007/03/04 Javascript
aspx中利用js实现确认删除代码
2010/07/22 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
javascript常用的方法整理
2015/08/20 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
AngularJS基础 ng-paste 指令简单示例
2016/08/02 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
vue实现淘宝购物车功能
2020/04/20 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
json跨域调用python的方法详解
2017/01/11 Python
Python简单操作sqlite3的方法示例
2017/03/22 Python
python3实现表白神器
2019/04/09 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
一文解决django 2.2与mysql兼容性问题
2020/07/15 Python
Django修改app名称和数据表迁移方案实现
2020/09/17 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
退休感言
2014/01/28 职场文书
大学学习计划书范文
2014/05/02 职场文书
十佳护士先进事迹
2014/05/08 职场文书
支部组织生活会方案
2014/06/10 职场文书
二年级学生期末评语
2014/12/26 职场文书
学生逃课检讨书
2015/02/17 职场文书
珍爱生命主题班会
2015/08/13 职场文书