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 多线程不加锁分块读取文件的方法
Dec 11 Python
对python 多个分隔符split 的实例详解
Dec 20 Python
Python 实例方法、类方法、静态方法的区别与作用
Aug 14 Python
python装饰器使用实例详解
Dec 14 Python
Python序列类型的打包和解包实例
Dec 21 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
Mar 06 Python
pytorch快速搭建神经网络_Sequential操作
Jun 17 Python
python pandas dataframe 去重函数的具体使用
Jul 20 Python
解决python3输入的坑——input()
Dec 05 Python
解决numpy数组互换两行及赋值的问题
Apr 17 Python
Pytorch 如何实现LSTM时间序列预测
May 17 Python
Python各协议下socket黏包问题原理
Apr 12 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制作简单的内容采集器的原理分析
2008/10/01 PHP
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
原生javascript实现连连看游戏
2019/01/03 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
python中的计时器timeit的使用方法
2017/10/20 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
实例讲解python中的协程
2018/10/08 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
keras多显卡训练方式
2020/06/10 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
2020/06/28 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
台湾时尚彩瞳专门店:imeime
2019/08/16 全球购物
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
目标管理责任书
2014/04/15 职场文书
2015年幼师工作总结
2015/04/28 职场文书
班委竞选稿范文
2015/11/21 职场文书
html+css 实现简易导航栏功能
2021/04/07 HTML / CSS
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
如何正确理解python装饰器
2021/06/15 Python
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
vue递归实现树形组件
2022/07/15 Vue.js