Django中的FBV、CBV和serializers序列化

1、FBV

FBV(function base views) 就是在视图里使用函数处理请求。html

看代码:django

urls.pyapi

from django.conf.urls import url, include
# from django.contrib import admin
from mytest import views
 
urlpatterns = [
    # url(r‘^admin/‘, admin.site.urls),
    url(r‘^index/‘, views.index),
]

views.py框架

from django.shortcuts import render
 
 
def index(req):
    if req.method == ‘POST‘:
        print(‘method is :‘ + req.method)
    elif req.method == ‘GET‘:
        print(‘method is :‘ + req.method)
    return render(req, ‘index.html‘)
注意此处定义的是函数【def index(req):】

index.html函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
    <form action="" method="post">
        <input type="text" name="A" />
        <input type="submit" name="b" value="提交" />
    </form>
</body>
</html>

上面就是FBV的使用。post

2、CBV

CBV(class base views) 就是在视图里使用类处理请求。url

将上述代码中的urls.py 修改成以下:code

from mytest import views
 
urlpatterns = [
    # url(r‘^index/‘, views.index),
    url(r‘^index/‘, views.Index.as_view()),
]

注:url(r‘^index/‘, views.Index.as_view()), 是固定用法。orm

将上述代码中的views.py 修改成以下:xml

from django.views import View
 
 
class Index(View):
    def get(self, req):
        print(‘method is :‘ + req.method)
        return render(req, ‘index.html‘)
 
    def post(self, req):
        print(‘method is :‘ + req.method)
        return render(req, ‘index.html‘)

注:类要继承 View ,类中函数名必须小写。

3、serializers序列化

django的序列化框架提供了一个把django对象转换成其余格式的机制,一般这些其余的格式都是基于文本的而且用于经过一个管道发送django对象,但一个序列器是可能处理任何一个格式的(基于文本或者不是)

django的序列化类位于django.core下面的serializers文件夹里面,base.py文件里面定义了序列器和反序列器的基类以及一些异常,init.py文件定义了如何根据格式来选择对应的序列器等内容,咱们一块儿来看看吧

init.py和base.py文件的函数原型以下图

def serialize(format, queryset, **options):
"""Serialize a queryset (or any iterator that returns database objects) using
a certain serializer."""
s = get_serializer(format)()
s.serialize(queryset, **options)
return s.getvalue()
 

 
class Serializer(object):
    """    Abstract serializer base class.    """
    # Indicates if the implemented serializer is only available for
    # internal Django use.
    internal_use_only = False
    def serialize(self, queryset, **options):

那下面咱们开始正式讲解django的序列化操做了

序列化数据 在最高层的api,序列化数据是很是容易的操做,看上面的函数可知,serialize函数接受一个格式和queryset,返回序列化后的数据:

简单的写法:

from django.core import serializers
data = serializers.serialize("xml", SomeModel.objects.all())

复杂的写法:

XMLSerializer = serializers.get_serializer("xml")
xml_serializer = XMLSerializer()
xml_serializer.serialize(queryset)
data = xml_serializer.getvalue()
相关文章
相关标签/搜索