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 捕获shell脚本的输出结果实例
Jan 04 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
在python中pandas读文件,有中文字符的方法
Dec 12 Python
python实现列表中最大最小值输出的示例
Jul 09 Python
解决python3 requests headers参数不能有中文的问题
Aug 21 Python
django 框架实现的用户注册、登录、退出功能示例
Nov 28 Python
Pycharm 安装 idea VIM插件的图文教程详解
Feb 21 Python
django迁移文件migrations的实现
Mar 31 Python
python保留格式汇总各部门excel内容的实现思路
Jun 01 Python
Python如何转换字符串大小写
Jun 04 Python
Python如何测试stdout输出
Aug 10 Python
python开发入门——列表生成式
Sep 03 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
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
2019/06/03 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
用javascript实现点击链接弹出&quot;图片另存为&quot;而不是直接打开
2007/08/15 Javascript
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
jQuery中end()方法用法实例
2015/01/08 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
微信小程序 如何引入外部字体库iconfont的图标
2018/01/31 Javascript
浅析Vue项目中使用keep-Alive步骤
2018/07/27 Javascript
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
python文件操作整理汇总
2014/10/21 Python
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
python实现比较两段文本不同之处的方法
2015/05/30 Python
如何将python中的List转化成dictionary
2016/08/15 Python
python实现求最长回文子串长度
2018/01/22 Python
python celery分布式任务队列的使用详解
2019/07/08 Python
中国宠物用品商城:E宠商城
2016/08/27 全球购物
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
南京软件公司的.net程序员笔试题
2014/08/31 面试题
通信工程专业女生个人求职信
2013/09/21 职场文书
护理职业应聘自荐书
2013/09/29 职场文书
自荐书格式
2013/12/01 职场文书
初中女生自我鉴定
2013/12/19 职场文书
公司道歉信范文
2014/01/09 职场文书
个性与发展自我评价
2015/03/06 职场文书
社区义诊通知
2015/04/24 职场文书
导游词之日月潭
2019/11/05 职场文书
CSS元素定位之通过元素的标签或者元素的id、class属性定位详解
2022/09/23 HTML / CSS