Django框架(二十四:前后端分离之分页的设置和csrf认证的解决)

2023-10-31

前后端分离开发和混合开发的区别还是很大的。前后端分离我们需要遵循restful规范,先介绍什么是restful api规范

a.同一种数据的操作,只设置一个url路由。也就是根据请求方法来区分具体的处理逻辑。而不再设置多个增删改查的路由。
        (1)可以基于FBV来通过请求方法的不同,处理不同的逻辑。
        url(r'^order/', views.order),
        def order(request):
            if request.method == 'GET':
                return HttpResponse('获取订单')
            elif request.method == 'POST':
                return HttpResponse('创建订单')
            elif request.method == 'PUT':
                return HttpResponse('更新订单')
            elif request.method == 'DELETE':
                return HttpResponse('删除订单')
        (2)可以基于CBV来实现处理不同的逻辑
        url(r'^order/', views.OrderView.as_view()),
        class OrderView(View):
            def get(self,request,*args,**kwargs):
                return HttpResponse(json.dumps(ret),status=201)
            def post(self,request,*args,**kwargs):
                return HttpResponse('创建订单')
            def put(self,request,*args,**kwargs):
                return HttpResponse('更新订单')
            def delete(self,request,*args,**kwargs):
                return HttpResponse('删除订单')
	 而两种方式中,最建议使用CBV的方式去写接口,更加简洁,不用判断了。
	
b. 域名建议
        为了对用户使用的url和网页中使用的接口api进行区别,设置如下规则
        (1)子域名的方式区分(需要解决跨域的问题):
            www.baidu.com (用户在浏览器中输入的地址,可以访问网站页面)
            但是网页需要到后台请求接口,获取数据,那么接口的api应该如何命名呢?
            api.baidu.com/v1/login.json
            用户一看到域名是以api开头的,就知道是接口,返回的是json数据。
        (2)URL的方式进行区分(不需要解决跨域问题):
            www.baidu.com (用户使用的URL)
            www.baidu.com/api/v1/login.json
        不管使用哪种方式,就是为了能够一眼区分出来这是一个api接口。
        
        两种方式哪一种更好呢?
        答案是第二种,因为第一种可能会出现跨域请求,也就是当域名不同或者端口不同的时候,都会出现跨域请求,而第二种保证了域名和端口的一致性,只是url不一样而已。
        跨域:因为浏览器的同源策略,当你通过浏览器向www.baidu.com前端页面发送请求的时候,网页需要向后台请求接口,但是如果接口的域名和当前的域名不一致,就会出现跨源请求的错误,无法访问到页面。而跨源是网页向api发送请求之后,服务器响应了这个请求,但是是浏览器端把这一次请求的响应给阻止了,并不是在请求不同域名的接口时,服务端不会响应这个请求。跨源是浏览器端的阻止行为,而不是服务器端的。


 c. 版本规则
        两个版本共存的时候,应该将API的版本号放入URL。
        api.example.com/api/v1/
        另一种做法是,将版本号放在HTTP头信息中,但不如放入URL方便和直观。Github采用这种做法。
    
    d. 面向资源编程
        将网络中的任何东西都看作是资源,对资源可以进行增删改查的操作,但是资源表示的是一个名称,如果一个url后面跟的是一个名词(单复数都可以),所用的名词往往与数据库的表格名对应,就表示要对这个资源进行增删改查的操作了。而get/post/delete/put是动词,所以url中不建议出现动词。
        www.baidu.com/api/v1/order/ (遵循规范)
        www.baidu.com/api/v1/orders/ (遵循规范)
        www.baidu.com/api/v1/get_order/ (没有遵循规范)
    
    e. HTTP方法规范
        GET:从服务器上获取一个或者多个资源
        POST:在服务器上新建一个资源
        PUT:在服务器跟新全部资源
        PATCH:在服务器更新部分资源
        比如用户表就有用户名,密码,性别,如果是PUT就全部更新。如果是PATHCH就只更新密码。
        
    f. 过滤规范
        www.baidu.com/api/v1/orders/?status=1&page=2&offset
    
    g. 状态码规范(状态码+code码)
        后台提供的状态码,供前端使用。
        200系列,300系列表示重定向,400系列表示客户端错误,500系列表示服务端错误(后台代码错误)。
        但是只有状态码还是不够的,请求的状态太多,所以除了使用状态码表示状态以外,还应该有code码来表示更加详细的请求情况。
        比如:支付宝的code码,20000,20001等
        
        def get(self,request,*args,**kwargs):
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django框架(二十四:前后端分离之分页的设置和csrf认证的解决) 的相关文章

  • Django 与其他 Python Web 框架相比?

    我几乎尝试过现有的每一个 Python Web 框架 我花了很长时间才意识到没有灵丹妙药的框架 每个框架都有自己的优点和缺点 我开始于蛇类 http snakelets sf net并衷心地享受能够在较低级别上控制几乎所有事情而无需大惊小怪
  • django默认身份验证表单显示用户名而不是电子邮件

    我用 django 实现了我自己的用户登录表单 如下所示 from django contrib auth forms import AuthenticationForm class CustomUserLoginForm Authenti
  • 是我的问题还是 Rails 和 Django 在 Windows 上安装困难?

    我尝试让这些框架在 Windows Vista 上运行几天 但没有成功 每次我认为我让它们工作时 我都会遇到一些涉及 PostgreSQL 或 MySQL 设置的随机错误 或者路径被搞砸了 或者一些其他命令行错误 未识别为内部或外部命令 或
  • 在 Postgres 中手动对列进行排序的正确方法是什么?

    我有一个用于开票的 SaaS 宠物项目 在其中 我希望我的客户每个都以票号 1001 开始 显然 我不能在 Postgres 中使用简单的自动字段 只需在值上添加 1000 因为我的所有客户将共享相同的数据库和相同的数据 tickets表
  • 如何防止 Django 解释包含大引号的块?

    我正在开发一个使用 Django 模板的网站 并且我必须生成包含成对的大引号的 HTML 有没有办法禁用 Django 对代码块的标签处理 像文字块标签这样的东西会很好 这样 literal LITERAL BRACES endlitera
  • Django:resolve(request.path).app_name不返回应用程序名称

    我正在尝试从视图或模板访问当前应用程序名称 在其他答案中如何在 django 中使用 python 获取应用程序名称 https stackoverflow com questions 6000205 how to get an app n
  • 图像字段模型形式的 Django 自定义验证(最大文件大小等)

    我有一个模型 其中有一个名为 横幅 的图像字段 我正在尝试验证文件大小和尺寸 并在图像太大时提供错误 这是 models py class Server models Model id models AutoField ID primary
  • Django - 为自定义小部件指定默认属性

    我创建了这个小部件 class DateTimeWidget forms TextInput attr class datetimepicker class Media js js jquery ui timepicker addon js
  • Django - 从另一个应用程序加载静态文件

    在 app1 中 我尝试从 app2 加载静态文件 我设置了没有STATICFILES FINDERS在项目中settings py 意思是 Django 将使用默认值 https docs djangoproject com en 1 1
  • 使用位于其他域的 JS 工作文件构建“工作人员”失败

    我在用反应 pdf https www npmjs com package react pdf在我的 Django Wagtail 网站上内联渲染 PDF 文件 为此 我在 HTML 模板中创建一个 ID 为 React 的 div 然后运
  • “‘测试’模块错误导入”是什么意思?

    我已经逐行复制了一个工作测试 只是更改了一些名称 至少我是这么认为的 现在我得到了这个非常神秘的错误 我用 FOO BAR 替换了一些东西 ImportError tests module incorrectly imported from
  • 从 Django 视图启动多核后台进程

    我使用 Django 为多核科学计算库创建基于浏览器的 GUI 工作流程大致如下 在浏览器中按 运行分析 调用django视图 在 django 视图中 调用库 为了简单起见 我们这样说 execfile path to library p
  • 自定义 Django 组模型

    我正在尝试向 Django 管理中的 组 添加一个字段 例如 当您在后端创建一个组时 您定义 名称 和 权限 我想向其中添加一个字段列表 CharField 这是否需要一个新的应用程序 或者我可以在我的根 models py 中扩展 Gro
  • Django - 扩展另一个应用程序 ModelAdmin?

    有没有办法扩展另一个应用程序 ModelAdmin 我有一个使用 django contrib comments 提供的功能的项目 CommentsAdmin ModelAdmin 类具有 actions flag comments app
  • Django 管理 - OneToOneField 内联抛出“没有外键”异常

    我有一个非常简单的应用程序 目前声明了两个模型 一个称为 Content 仅保存内容数据 另一个是 Page 其中包含 Content 作为 OneToOneField 我这样做的原因是这样我可以将 Page 作为我使用的实际具体类 并且当
  • Django 如何使表单字段可选

    在 django 中如何使表单字段可选 我的模型 class Student models Model first name models CharField max length 30 last name models CharField
  • 无法为 Django 的重置密码流程创建集成测试

    我正在尝试对密码重置流程实施集成测试 但我陷入了 密码重置 确认 视图 我已经手动测试了该流程 并且工作正常 不幸的是 Django 单元测试客户端似乎无法正确遵循此视图中所需的重定向 网址配置 from django contrib au
  • 是否可以将 FastAPI 与 Django 一起使用?

    我是一名 Django 开发人员 最近偶然发现了 FastAPI 框架 然后我决定尝试一下 但通常当您谈论使用 Django 构建 RESTful API 时 您通常会使用 Django Rest Framework DRF 有人知道是否可
  • 如何使用 django (python) 和 s3 上传文件?

    我正在寻找一种将文件上传到 s3 的方法 我正在使用 django 我目前正在使用亚马逊的 python 库进行上传以及以下代码 View def submitpicture request fuser request session lo
  • django admin 中内联模型的分页器

    我有这个简单的 django 模型 由一个传感器和特定传感器的值组成 每个日射强度计的值数量很多 gt 30k 是否可以以某种方式分页PyranometerValues在特定日期或一般情况下将分页器应用于管理内联视图 class Pyran

随机推荐

  • Oracle的高可用

    快速浏览了一下Oracle官方的网页以及非官方的ppt 简单了解了一下Oracle提供的高可用方案 主要有三种 1 RAC RAC Real Application Clusters 多个Oracle服务器组成一个共享的Cache 而这些O
  • Python读取cfg文件

    mysql HOST 127 0 0 1 PORT 3306 USER root PWD 123456789 DB employees CHARSET utf8 redis redis配置 暂时写在这里 线下配置 线上一定要从新配置 并且不
  • Android入门教程

    EditText 监听回车 使用EditText时 有时候我们会需要监听输入的回车 以做出一些操作 或者需要把回车变成 搜索 发送 或 完成 等等 EditText 为我们提供了一个属性 imeOptions 用来替换软键盘中 enter
  • 怎样简便的使用vw完成移动端rem适配

    怎样简便的完成移动端rem适配 了解一些必要的单位 px 像素 进行页面开发的基础单位 em 相对单位 rem 相对单位 vw 相对宽度 vh 相对高度 如何进行简单的px rem转换 了解一些必要的单位 px 像素 进行页面开发的基础单位
  • 数据库第十五课-------------非关系型数据库----------Redis

    作者前言 作者介绍 作者id 老秦包你会 简单介绍 喜欢学习C语言和python等编程语言 是一位爱分享的博主 有兴趣的小可爱可以来互讨 个人主页 小小页面 gitee页面 秦大大 一个爱分享的小博主 欢迎小可爱们前来借鉴 Redis的简单
  • 通信工程专业论文毕设选题推荐

    文章目录 1前言 2 如何选题 2 1 移动通信方向 2 2 嵌入式开发方向 2 3 人工智能方向 2 4 物联网方向 2 5 算法研究方向 2 6 移动应用开发方向 2 7 网络通信方向 2 8 学长作品展示 4 最后 1前言 近期不少学
  • html视频自动播放

    音频
  • Java如何让CPU利用率达到100%

    一 背景 记得有一次去面试Java软件开发工程师 面试官问了我一个关于Java如何让CPU利用率到达百分百的问题 我当时下意识的回答到让程序死循环就可以了 这源于我之前的工作中有一次无意间写了死循环 当时电脑卡的简直不能动 我都关机了 可是
  • C/C++编程:模板参数

    现在存在3种模板参数 类型参数 非类型参数 模板的模板参数 C 设计模板参数的用意在于 尽量将编译可知的因素提取处理 从而进一步抽象代码 无论时代码中的类型 变量地址还是函数地址 只要编译时可知 C 语言就为其一视同仁的提供模板参数支持 以
  • el-dialog 内容居中

    原样 dialog 内容部分 默认左对齐 目的 内容居中显示 比如表单 修改 el dialog el dialog body display flex justify content center align items center
  • 微信 获取signature签名

    本文是使用java语言调用微信提供的接口 获取签名的详细过程 大致步骤如下 在官网生成appId 与 appSecret 然后通过appId 与 appSecret调用接口获取到Access token 通过Access token调用微信
  • SAP 谈谈成本中心和内部订单

    内部订单 内部订单用于计划 收集 监视和结算在公司内部进行的特定操作或任务 内部订单可用于不同的目的 这种功能分类反映在不同的订单类型中 其属性定义了在系统中处理订单的方式 SAP系统内内部定单分为两类 实际定单 和 统计性定单 统计性定单
  • 【千律】C++基础:文件的删除、复制、移动和重命名

    include
  • Qt--在.pro文件中添加链接库的写法

    要在Qt中使用OpenCV 按照OpenCV与Qt的环境搭建及Demo中的步骤配置了Qt Creator的编译选项 选择MSVC 再修改 pro文件 INCLUDEPATH D Program Files opencv opencv3 4
  • automake 生成的Makefile之 install过程

    automake生成的Makefile当你执行make install 的时候我们知道会找install规则 那么具体是怎么安装的呢 看下面 install install recursive 很显然 install recursive是依
  • SYNPROXY抵御DDoS攻击的原理和优化

    序 又到了周末 我又要必须写点什么了 周末依然加班 感谢周末上班平日休息的老婆分担了几乎所有家务 一切依然 然而这些对我来讲都不是个事儿 事实上我是希望取消一切节假日和周末的 所谓的周末和节假日是我一直以来觉得出自 圣经 里面最荒唐的东西
  • 一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?

    include
  • Creator实战项目【保卫萝卜】-- 格子地图

    import ScriptBase from ScriptBase const ccclass property cc decorator ccclass export default class TiledMapCtrl extends
  • lru页面置换算法_页面更换算法

    当一个理论过时或者出现悖论时 我们就用一个新的理论来替换它 当一个页面不再有用时 我们也用一个新的页面进行替换 准确地说 我们不是因为一个页面过时而用一个新的页面来替换 而是因为需要使用新的页面而用一个过时的页面作为替换牺牲品 页面需要更换
  • Django框架(二十四:前后端分离之分页的设置和csrf认证的解决)

    前后端分离开发和混合开发的区别还是很大的 前后端分离我们需要遵循restful规范 先介绍什么是restful api规范 a 同一种数据的操作 只设置一个url路由 也就是根据请求方法来区分具体的处理逻辑 而不再设置多个增删改查的路由 1