djangoMTV初探

news2024/11/26 21:29:44

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)
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1009050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zTasker—简洁易用强大的定时热键一体自动化工具,效率倍增器

软件名称 zTasker 应用平台 PC Windows7及以上 一句简介 市面上定时类软件很多&#xff0c;但无一例外功能都很单一&#xff0c;要完成不同的任务&#xff0c;需要不同的软件 市面上的热键软件&#xff0c;要么功能少&#xff0c;要么像是AutoHotKey这样对于一般用户太专业…

Flutter插件的制作和发布

Flutter制作插件有两种方式&#xff08;以下以android和ios为例&#xff09;&#xff1a; 目录 1.直接在主工程下的android和ios项目内写插件代码&#xff1a;2.创建独立Flutter Plugin项目&#xff0c;制作各端插件后&#xff0c;再引入项目&#xff1a;1. 创建Flutter Plugin…

《深入PostgreSQL的存储引擎:原理与性能》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

Multisim14.0仿真(十四)电压跟随器

一、仿真原理图&#xff1a; 二、仿真效果图&#xff1a;

Ae 效果详解:CC Pixel Polly

模拟/CC Pixel Polly Simulation/CC Pixel Polly CC Pixel Polly&#xff08;CC 像素多边形&#xff09;基于源图像分解成多个破碎的像素多边形&#xff0c;无需设置关键帧自动生成碎片飞散的动画效果。 ◆ ◆ ◆ 效果属性说明 Force 力量 用于控制像素分解的力量大小。 默认…

Mybatis懒加载

懒加载是什么&#xff1f; 按需加载所需内容&#xff0c;当调用到关联的数据时才与数据库交互否则不交互&#xff0c;能大大提高数据库性能&#xff0c;并不是所有场景下使用懒加载都能提高效率。 Mybatis懒加载&#xff1a;resultMap里面的association、collection有延迟加载功…

宋浩概率论笔记(八)假设检验

宋浩系列全系列的最后一更&#xff01; 本章考察频率很低&#xff0c;核心在于记忆检验不同参数时用到的分布~

定积分的应用:几何应用与物理应用

目录 几何应用 计算平面图形的面积 计算旋转体的面积 计算曲线弧长 物理应用 几何应用 计算平面图形的面积 定积分在平面图形的面积计算中具有广泛的应用。通过定积分&#xff0c;你可以计算出曲线图形下的面积&#xff0c;从而求解各种复杂形状的区域面积。以下是一些常…

80端口被占用

winR输入&#xff1a;services.msc进入服务窗口 找到SQL Server Reporting Services &#xff0c;右键“属性”停止服务

“哪李贵了”主播带货电商被喷,说到底还是服务问题

近日&#xff0c;李佳琦在带货某品牌眉笔时发表的相关言论引发争议。 9月10日晚&#xff0c;李佳琦在直播间带货国货美妆品牌花西子眉笔时&#xff0c;有网友质疑79元一支的眉笔涨价&#xff0c;李佳琦先是解释花西子有多不容易&#xff0c;“哪里贵了&#xff1f;这么多年都是…

到底适不适合报考浙大MPA项目?这个角度评估比较客观

现今的浙大mpa项目招生可以说是如日中天&#xff0c;2023年1900报考量创造历史最高&#xff0c;也把浙大mpa招生复试自划线顶的老高&#xff0c;200的分数只能碰得到复试资格&#xff0c;距离录取结果还有不少悬念&#xff0c;因此报考浙大mpa项目目前最好的办法是提面冲击A资格…

【力扣每日一题】2023.9.14 可以攻击国王的王后

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 给我们皇后和国王的坐标&#xff0c;问我们哪些皇后可以攻击到国王。 这个应该是国际象棋的走子规则&#xff0c;皇后的攻击范围在跟皇后…

阿里云CDN缓存配置及优化

参考阿里云官网文档&#xff1a;https://help.aliyun.com/practice_detail/603170 缓存时间配置 在缓存管理中&#xff0c;可以方便地指定目录和文件后缀名在CDN节点上的缓存时间&#xff0c;缓存时长配置的长短&#xff0c;取决于源站对该文件的变更频率。我们需要分析下业务中…

存储创新靠软件?

IT产业在经历10多年的狂飙后&#xff0c;近两年在创新速度上看似开始"乏力"&#xff0c;即使iPhone&#xff0c;每一次发布会后也被吐槽缺乏创新。 其实&#xff0c;IT产品在过去十多年的快速发展后&#xff0c;的确在硬件发展方面遇到了一些瓶颈。但一个产品创新能…

【论文阅读】MARS:用于自动驾驶的实例感知、模块化和现实模拟器

【论文阅读】MARS&#xff1a;用于自动驾驶的实例感知、模块化和现实模拟器 Abstract1 Introduction2 Method2.1 Scene Representation2.3 Towards Realistic Rendering2.4 Optimization3.1 Photorealistic Rendering3.2 Instance-wise Editing3.3 The blessing of moduler des…

怎么压缩视频?视频过大跟我这样压缩

在日常生活中&#xff0c;我们常常会遇到需要上传或者发送视频的情况&#xff0c;然而&#xff0c;有时候视频文件过大&#xff0c;无法顺利上传或发送&#xff0c;这时候就需要对视频进行压缩。那么&#xff0c;如何有效地压缩视频呢&#xff1f;看完下面三个方法你就明白了。…

在四维轻云中,能够上传哪些地理空间数据?

四维轻云是一款地理空间数据在线管理软件&#xff0c;支持各类地理空间数据的在线管理、浏览及分享&#xff0c;用户可不受时间地点限制&#xff0c;随时随地上传、管理、查看及分享各类地理空间数据。软件还具有项目管理、场景搭建、素材库等功能模块&#xff0c;支持在线协作…

软件测试/测试开发名企定向培养训练营,升职加薪快人一步!

测试人员如何提升核心竞争力 作为一个测试工程师&#xff0c;自动化测试已经是必须要掌握的技能了。学习自动化测试有两个难点&#xff0c;除了其本身拥有一定的技术门槛之外&#xff0c;实战经验才是学习自动化测试的最大难点。部分初中级测试工程师往往在掌握了基本的编程与…

jupyter notebook找不到python内核(kernel)的解决记录

文章来源&#xff1a;jupyter notebook找不到python内核(kernel)的解决记录 – WhiteNights Site 貌似导致这个问题的原因有非常多&#xff0c;这里只是说一个可能的解决方法。 前情提要&#xff1a;在费了九牛二虎之力&#xff0c;终于安装成功了jupyter notebook&#xff0c;…

ubuntu设置初始的root密码

在用vmware安装ubuntu的虚拟机后&#xff0c;只有初始设置的用户和密码&#xff0c;当进入系统后使用su切换成root账户后&#xff0c;要求输入密码&#xff0c;但输入安装时设置的用户密码不对&#xff0c;需要设置初始的root密码。 解决&#xff1a; 1、使用安装时候的用户登…