Django学习系列之django restframework

曾几何时,Ajax已经统治了Web开发中的客户端,而REST成为web世界中最流行的架构风格(architecture style)。所以我们的选择变得很简单:前端ajax访问后端的RESTful API对资源进行操作
Django中有一些可选的REST framework,比如django-piston,django-tasypie。 但是我和google(呵呵,不好意思)推荐这个:Django REST framework

django-framework就是定义一个url,可以利用这个url去数据库中读数据,或者写数据

安装配置django-framework

安装django-framework

pip install djangorestframework
pip install markdown
pip install django-filter

在Project中配置django-framework

打开project的settings.py

INSTALLED_APPS = (
    ...
    ‘rest_framework‘,
)

REST_FRAMEWORK = {
 # Use Django‘s standard `django.contrib.auth` permissions,
 # or allow read-only access for unauthenticated users.
 ‘DEFAULT_PERMISSION_CLASSES‘: [
     ‘rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly‘ #所有人都能访问API,有读写权限
 ]
}

实例一:编写一个API用来获取用户信息

在Madking的url.py里配置api的url

from assets import rest_urls as asset_urls

urlpatterns = [
    url(r‘^api/‘, include(asset_urls)),  #api的入口url

]

在asset的rest_urls.py里注册并关联视图

from django.conf.urls import url, include
from rest_framework import routers
#导入rest_viewset,取个别名views
from assets import rest_viewset as views
#这个是rest_framework封装django 的routers
router = routers.DefaultRouter()

#将views里的UserViewSet和AssetViewSet注册进来
#用户请求http://127.0.0.1:8000/api/users/和http://127.0.0.1:8000/api/asset/就能获取到数据
router.register(r‘users‘, views.UserViewSet)
router.register(r‘asset‘, views.AssetViewSet)

urlpatterns = [
    url(r‘^‘, include(router.urls)),
    url(r‘^api-auth/‘, include(‘rest_framework.urls‘, namespace=‘rest_framework‘)), #这个是API的认证,必须得登录才能请求API

]

在asset的rest_viewset.py里定义去数据库里查询数据

from rest_framework import viewsets
from assets import models

from assets import rest_serializers

class UserViewSet(viewsets.ModelViewSet):
    queryset = models.UserProfile.objects.all()          #去查询所有的数据
    serializer_class = rest_serializers.UserSerializers  #序列化(表现层,将数据按照一定格式返回给用户)

class AssetViewSet(viewsets.ModelViewSet):
    queryset = models.Asset.objects.all()
    serializer_class = rest_serializers.AssetSerializer

在asset里的rest_serializers.py里定义

#导入表结构
from assets import models
#导入serializer方法
from rest_framework import serializers

#获取UserProfile表里的信息
class UserSerializers(serializers.ModelSerializer):
    class Meta:
        #指定数据库,
        model = models.UserProfile
        #指定返回给用户的具体表中的哪些字段
        fields = (‘username‘,‘name‘)

#获取Asset表里的信息
class AssetSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Asset
        depth=2
        fields = (‘name‘, ‘sn‘,‘server‘,‘networkdevice‘)

测试

访问http://127.0.0.1:8000/api/能看到API

访问获取用户信息的API:http://127.0.0.1:8000/api/users/

时间: 04-07

Django学习系列之django restframework的相关文章

Django学习系列之中间件

中间件的定义 中间件是一个.一个的管道,如果相对任何所有的通过Django的请求进行管理都需要自定义中间件 中间件可以对进来的请求和出去的请求进行控制 中间件是一类 django请求生命周期 自定义中间件 process_request(self,request): 请求到达之后之后先执行这个中间件 process_view(self, request, callback, callback_args, callback_kwargs): process_exception(self, requ

Django学习系列之基础

Django介绍 Django简介 Django是一个基于MVC构造的框架.但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model).模板(Template)和视图(Views),称为 MTV模式,它们各自的职责如下: 模型(Model),即数据存取层 处理与数据相关的所有事务: 如何存取.如何验证有效性.包含哪些行为以及数据之间的关系等 视图(View),即表现层 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示;模型与模板的桥

Django学习系列之ORM-QuerySetAPI

基本操作 # 增 models.Tb1.objects.create(c1='xx', c2='oo') #增加一条数据,可以接受字典类型数据 **kwargs obj = models.Tb1(c1='xx', c2='oo') obj.save() dic = {'c1':'xx','c2':'oo'} models.Tb1.objects.create(**dic) #Form的产出结果是一个字典,可以根据这个Form的字典和**直接在数据库创建数据 # 查 models.Tb1.obje

Django学习系列之Form表单和ajax

ajax 通过ajax发送一条数据 定义urls.py from django.conf.urls import url from django.contrib import admin from cmdb import views urlpatterns = [ url(r'^ajax_demo/', views.ajax_demo), ] 定义views.py from django.shortcuts import render from django.shortcuts import H

Django学习系列之路由系统

一.基于App的路由 作用: 根据App对路由规则进行分类,在全局urls.py包含某个项目的urls.py 示例 定义全局urls.py(全局路由系统) #导入include from django.conf.urls import url,include from django.contrib import admin #导入app下的view函数 from learn import views urlpatterns = [ url(r'^admin/', admin.site.urls)

Django学习系列之模型

Django ORM简介 介绍 关系对象映射(Object Relational Mapping) Django中遵循Code first的原则,即根据代码中定义的类生成数据库 ORM中: 我们写的类表示数据库的表名 根据这个类创建的对象是表结构 Django ORM 一对多关系例子 定义urls.py from django.conf.urls import url from django.contrib import admin #导入django admin admin.autodisco

Django学习系列之CSRF

Django CSRF 什么是CSRF CSRF, Cross Site Request Forgery, 跨站点伪造请求.举例来讲,某个恶意的网站上有一个指向你的网站的链接,如果 某个用户已经登录到你的网站上了,那么当这个用户点击这个恶意网站上的那个链接时,就会向你的网站发来一个请求, 你的网站会以为这个请求是用户自己发来的,其实呢,这个请求是那个恶意网站伪造的 Django提供的CSRF防护机制 django 第一次响应来自某个客户端的请求时,会在服务器端随机生成一个 token,把这个 t

Django学习系列之模板系统

一.模板标签 if/else {%  if  %}标签检查一个变量的值是否为真或者等于另外一个值,如果为真,系统会执行{%  if  %}和{%  endif  %}之间的代码块,例如: {% if today_is_weekend %} <p>Welcome to the weekend!</p> {% endif %} {%  else  %}标签是可选的,如果不为真则执行{%  else  %}和{%  endif  %}之间的代码块 注意:一定要用{%  endif  %}

Django学习系列之Form验证

基与上篇文章,在这里我们用3种方式来验证表单. 1.表单字段的验证器 详见:https://docs.djangoproject.com/en/1.6/ref/validators/ from django.core.exceptions import ValidationError def validate_nickname(value):     if value == "badboy":         raise ValidationError(u'%s is private,