Django中REST风格数据传输
来源:互联网 发布:淘宝客服怎么认证 编辑:程序博客网 时间:2024/05/20 07:32
在《Python Web开发:测试驱动方法》一书中的第七章,主要讲解了如何利用url的方式进行数据的传递和存储。
本书主要采用了先测试、后创建功能的方式进行书写,基本上所有的内容都是通过功能测试、单元测试和实现功能三个步骤的循环工作。这种方法让我们能够深刻地理解TDD这一基本思想,但并不利于Django框架的基本学习,所以我将前端html页面、视图层views.py和模型层models.py单独摘出来,帮自己梳理一下思路。
模板层
到本书的第七章,建立了两个html文件,分别是主页的home.html和用于不同用户记录和传输数据的list.html。
看过这本书的读者可以知道,在这一章,list.html是copy自home.html,之后删除了home中的table部分。home.html的主要功能是在form元素中添加method="POST"
action="/lists/new"
这两个属性,当用户在输入框中输入数据后,以POST的方式,传输到新的url/lists/new
。
同理,list.html的form 的action属性被设置为/lists/{{ list.id }}/add_item
, 跳转到了新的页面。
home.html<!DOCTYPE html><html> <head> <title>To-Do lists</title> </head> <body> <h1>Start a new To-Do list</h1> <form method="POST" action="/lists/new"> <input name="item_text" id="id_new_item" placeholder="Enter a to-do item"/> {% csrf_token %} </form> </body></html>
list.html<!DOCTYPE html><html> <head> <title>To-Do lists</title> </head> <body> <h1>Your To-Do list</h1> <form method="POST" action="/lists/{{ list.id }}/add_item"> <input name="item_text" id="id_new_item" placeholder="Enter a to-do item"/> {% csrf_token %} </form> <table id="id_list_table"> {% for item in list.item_set.all%} <tr><td>{{forloop.counter}}: {{ item.text }}</td></tr> {% endfor %} </table> </body></html>
urls.py
个人理解,Django的urls.py文件就是一个映射表,可以将url与视图层的功能方法对应起来,换句话说,它就是一个url请求映射表。
Django建议开发者将项目的总urls文件与各个应用的文件分开存储,所以本文建立了superlists/urls.py
和lists/url.py
两个urls.py。
superlists/urls.pyfrom django.conf.urls import url, includefrom lists import views as list_viewsfrom lists import urls as list_urlsurlpatterns = [ url(r'^$', list_views.home_page, name='home'), url(r'^lists/', include(list_urls)),]
lists/url.pyfrom django.conf.urls import urlfrom lists import viewsurlpatterns = [ url(r'^new$', views.new_list, name='new_list'), url(r'^(\d+)/$', views.view_list, name='view_list'), url(r'^(\d+)/add_item$', views.add_item, name='add_item'),]
模型层和视图层
Django并不是严格意义上的MVC模式,即MODEL, VIEW, CONTROLLER。因为它的View层承担了传统的控制层的一部分功能,可以进行数据的操作。
在本文中,通过url的映射,views.py
中存在着一一对应的方法。用户从home.html进入网站后,输入数据跳转到list.html
中,并执行new_list(request):
跳转到持有相关id号的url中,并通过view_list(request, list_id):
显示数据。而在list页面中,每次提交则再次触发action="/lists/{{ list.id }}/add_item"
,将数据添加到数据库中后在此跳转回/lists/{list_.id}/
。
models.pyfrom django.db import modelsclass List(models.Model): passclass Item(models.Model): text = models.TextField(default='') list = models.ForeignKey(List, default=None)
views.pyfrom django.shortcuts import render, redirectfrom django.http import HttpResponsefrom lists.models import Item, List# Create your views here.def home_page(request): return render(request, 'home.html')def view_list(request, list_id): list_ = List.objects.get(id=list_id) return render(request, 'list.html', {'list': list_})def new_list(request): list_ = List.objects.create() Item.objects.create(text=request.POST['item_text'], list=list_) return redirect(f'/lists/{list_.id}/')def add_item(request, list_id): list_ = List.objects.get(id=list_id) Item.objects.create(text=request.POST['item_text'], list=list_) return redirect(f'/lists/{list_.id}/')
- Django中REST风格数据传输
- piston-在django中实现REST风格的API
- Django REST风格接口实现匿名访问
- REST风格
- rest风格
- REST风格
- rest风格
- REST风格
- rest风格
- REST风格中POST与PUT差别
- django rest framework中认证Authentication
- Django-rest-framework中过滤器的定制
- Django REST/ Django RESTful
- WebService中注解开发,CXF,Spring整合,Rest风格
- 在dubbo中开发REST风格的远程调用
- 如何在SpringMVC中使用REST风格的url
- SpringMVC中rest风格以及四种请求方式
- 关于REST架构风格。
- 1031. Hello World for U (20)
- springmvc与spring父子容器controller扫描机制
- “码工”下足笨功夫 二维码门牌更智慧
- 芯片——摩尔定律的传奇(下)
- webservice接口编写
- Django中REST风格数据传输
- web安全之CSRF
- fatal: refusing to merge unrelated histories
- C#高级应用之CodeDomProvider类
- 文档格式转换技巧全记录,超完整的文档格式转换方式
- Fragment+webview实现物理返回键的监听
- 手机号、银行卡号格式化
- string首尾去空格
- integer源码mark