djangoMTV初探

1.restful请求方式

一个视图对应多个操作(增删改查)



老的方式

views.py

复制代码
from django.shortcuts import render
from django.http import HttpResponse,request,QueryDict, JsonResponse
from myapp.models import User
from django.views.generic import View
# Create your views here.
def user(request):
    if request.method == "GET":
        return HttpResponse("获取用户")
    elif request.method == "POST":
        name = request.POST.get('name')
        city = request.POST.get('city')
        sex = request.POST.get('sex')
        age = request.POST.get('age')
        User.objects.create(
            name=name,
            city=city,
            sex=sex,
            age=age
        )
        return HttpResponse("创建用户成功!")
    elif request.method == "PUT":
        data = QueryDict(request.body)
        id = data.get('id')
        user_obj = User.objects.get(id=id)
        user_obj.city = data.get('city')
        user_obj.sex = data.get('sex')
        user_obj.age = data.get('age')
        user_obj.save()
        # 方式2
        # data = {'city': data.get('city'), 'sex': data.get('sex'), 'age': data.get('age')}
        # User.objects.filter(id=id).update(**data)
        res = {'code': 200, 'msg': '更新成功!'}
        return JsonResponse(res)
    elif request.method == "DELETE":
        # request有GET和POST,没有DELETE和PUT
        data = QueryDict(request.body)
        id = data.get('id')
        try:
            User.objects.get(id=id).delete()
            res = {'code': 200, 'msg': '删除用户成功!'}
        except Exception:
            res = {'code': 500, 'msg': '删除用户失败!'}

        return JsonResponse(res)#返回的是json对象,httpresponse返回的是字符串

def user_edit(request):
    id = request.GET.get('id')
    user_obj = User.objects.get(id=id)
    return render(request, 'user_edit.html', {'id': id, 'user': user_obj})

def user_add(request):
    return render(request, 'user_add.html')

def user_list(request):
    user_list = User.objects.all()
    return render(request,'user_list.html',{'user_list': user_list})
# 上面是老式的api请求方式,

user_list.html

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>列出所有用户</title>
    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
</head>
<body>
<button><a href="/myapp/user_add" target="_blank">创建用户</a></button>
<table border="1">
    <thead>
        <tr>
            <th style="display: none">ID</th>
            <th>姓名</th>
            <th>城市</th>
            <th>性别</th>
            <th>年龄</th>
            <th>操作</th>
        </tr>
    </thead>
    <tbody>
        {% for i in user_list %}
        <tr>
            <td style="display: none">{{ i.id }}</td>
            <td>{{ i.name }}</td>
            <td>{{ i.city }}</td>
            <td>{{ i.sex }}</td>
            <td>{{ i.age }}</td>
            <td>
                <button><a href="/myapp/user_edit?id={{ i.id }}" target="_blank">编辑</a></button>
                <button id="del" onclick="delUser(this)">删除</button>
            </td>
        </tr>
        {% endfor %}
    </tbody>
</table>
<script>
    function delUser(obj) {
        confirm = confirm('是否删除该用户?');
        if (confirm) {
            id = $(obj).parent().parent().find("td:eq(0)").text(); // 获取button父元素td,再获取td父元素tr,最后获取tr第一个td值
            data = {'id': id};
            console.log(id)
            $.ajax({
                type: 'DELETE',
                url: '/myapp/user/',
                data: data,
                success: function (result) {
                    if(result.code === 200) {
                        alert(result.msg);
                        #
                        location.reload();
                    } else {
                        alert(result.msg)
                    }
                }
            })
        }
    }
</script>

</body>
</html>

user_edit.html

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>编辑用户</title>
    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
</head>
<body>
<h2>编辑用户</h2>
<form action="#">
    <input type="text" name="id" value="{{ user.id }}" style="display: none">
    姓名:<input type="text" name="name" value="{{ user.name }}"><br>
    城市:<input type="text" name="city" value="{{ user.city }}"><br>
    性别:<input type="text" name="sex" value="{{ user.sex }}"><br>
    年龄:<input type="text" name="age" value="{{ user.age }}"><br>
    <input type="button" value="提交" onclick="go()">
</form>
<script>
    function go() {
        var id = $('input[name=id]').val();
        var name = $('input[name=name]').val();
        var city = $('input[name=city]').val();
        var sex = $('input[name=sex]').val();
        var age = $('input[name=age]').val();
        data = {'id': id, 'name': name, 'city': city, 'sex': sex, 'age': age};
        $.ajax({
            type: 'PUT',
            url: '/myapp/user/',
            data: data,
            success: function (result) {
                if ( result.code === 200 ) {
                    alert(result.msg)
                }
            }
        })
    }

</script>
</body>
</html>

user_add.html

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>创建用户</title>
</head>
<body>
<h2>创建用户</h2>
<form action="/myapp/user/" method="post">
    姓名:<input type="text" name="name"><br>
    城市:<input type="text" name="city"><br>
    性别:<input type="text" name="sex"><br>
    年龄:<input type="text" name="age"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

myapp/urls.py

复制代码
from django.contrib import admin
from django.urls import path,include
from myapp import views

urlpatterns = [
    path('user/',views.user),
    path('user_list/',views.user_list),
    path('user_add/',views.user_add),
    path('user_edit/', views.user_edit)
]

上述是函数视图,if多分支的方式。

用django的类进行替换,类视图:

复制代码
class UserView(View):
    def get(self, request):
        if request.GET.get('id'):
            pass
            # user_obj = User.objects.get(id=request.GET.get('id'))
            # res = {'code': 200, 'msg': '成功!', user_obj: user_obj}
            # return JsonResponse(res)
        else:
            user_list = User.objects.all()
            return render(request, 'user_list.html', {'user_list': user_list})

    def post(self, request):
        name = request.POST.get('name')
        city = request.POST.get('city')
        sex = request.POST.get('sex')
        age = request.POST.get('age')
        User.objects.create(
            name=name,
            city=city,
            sex=sex,
            age=age
        )
        return HttpResponse("创建用户成功!")

    def put(self, request):
        data = QueryDict(request.body)
        id = data.get('id')
        user_obj = User.objects.get(id=id)
        user_obj.city = data.get('city')
        user_obj.sex = data.get('sex')
        user_obj.age = data.get('age')
        user_obj.save()
        # 方式2
        # data = {'city': data.get('city'), 'sex': data.get('sex'), 'age': data.get('age')}
        # User.objects.filter(id=id).update(**data)
        res = {'code': 200, 'msg': '更新成功!'}
        return JsonResponse(res)

    def delete(self, request):
        data = QueryDict(request.body)
        id = data.get('id')
        try:
            User.objects.get(id=id).delete()
            res = {'code': 200, 'msg': '删除用户成功!'}
        except Exception:
            res = {'code': 500, 'msg': '删除用户失败!'}

        return JsonResponse(res)

urls.py

复制代码
from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    # path('user/', views.user),
    path('user/', views.UserView.as_view()),   #类视图用的url地址
    path('user_add', views.user_add),
    path('user_edit', views.user_edit)
]
相关推荐
m0_613856291 小时前
mysql如何利用事务隔离级别解决特定业务冲突_mysql隔离方案选型
jvm·数据库·python
Adios7941 小时前
VPR:Pitts50K和Norland数据集下载
数据库
东风破1371 小时前
DM用户权限、表、约束等对象的基本操作,SQL日志的开启介绍
数据库·sql·dm达梦数据库
收获不止数据库1 小时前
达梦9发布会归来:AI 时代,我们需要一款什么样的数据库?
数据库·人工智能·ai·语言模型·数据分析
小宇的天下2 小时前
Virtuoso GUI 界面中的关键模块定义
数据库
bqq198610262 小时前
MySQL 5.7 与 MySQL 8.0 的主要区别
数据库·mysql
Elastic 中国社区官方博客2 小时前
Elastic-caveman : 在不损失 Elastic 最佳效果的情况下,将 AI 响应 tokens 减少64%
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
互联网推荐官3 小时前
上海软件定制开发全流程拆解:需求分析、技术选型与交付管理的工程实践
大数据·数据库·需求分析
专注API从业者3 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
大迪deblog3 小时前
系统架构师-数据库-数据库设计
数据库·oracle·系统架构