Django rest_framework

关于rest

rest:representational state transfer 表述性状态转移

rest原则:

<1> 网络上的所有事物都可以被抽象为资源
<2> 米格资源都有一个唯一的资源标识符
<3> 同一个资源具有多种表现形式(xml,json等)
<4> 对资源的各种操作不会改变资源标识符
<5> 所有的操作都是无状态的

restful

restful:遵循了rest原则的web服务

restul是由rest派生出来的

用法:
在Restful之前的操作:

http://127.0.0.1/user/query/1 GET 根据用户id查询用户数据

http://127.0.0.1/user/save POST 新增用户

http://127.0.0.1/user/update POST 修改用户信息

http://127.0.0.1/user/delete GET/POST 删除用户信息

RESTful用法:

http://127.0.0.1/user/1 GET 根据用户id查询用户数据

http://127.0.0.1/user POST 新增用户

http://127.0.0.1/user PUT 修改用户信息

http://127.0.0.1/user DELETE 删除用户信息

restful API设计

Django rest_framework

  1. 安装依赖 (Python2.7 Django1.8.11 rest_framework3.4.4)
  2. 创建项目和应用(django-admin startproject(startapp) (name) 这里先建立项目再建立应用
  3. 配置项目
  • 配置settings文件

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'application',  # app 名称
    'rest_framework' # 添加rest_framework
)

REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    # 'PAGE_SIZE': 1,#每页数量
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}

# 配置数据库
import pymysql

pymysql.install_as_MySQLdb()

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'application',
        'USER': 'root',
        'PASSWORD': 'root',
        'PORT': '3306'
    }
}


  • 配置urls文件
    配置相关的路由
  1. 编写models
# -*- coding:utf-8 -*-
from django.db import models


# Create your models here.

class UserInfo(models.Model):
    name = models.CharField(verbose_name=u'姓名', max_length=100)
    # 0 男;1 女;2 其他
    sex = models.SmallIntegerField(verbose_name=u'性别')
    age = models.IntegerField(verbose_name=u"年龄")
    hobby = models.CharField(verbose_name=u"爱好", max_length=200)
    email = models.EmailField(verbose_name=u'邮箱')
    phone = models.IntegerField(verbose_name=u"电话")
    username = models.CharField(verbose_name=u'账号', max_length=200)
    paasword = models.CharField(verbose_name=u'密码', max_length=200)
    safe_code = models.CharField(verbose_name=u'安全码', max_length=200)

    class Meta:
        verbose_name = u'用户表'
        db_table = 'user_info'


  1. 创建serializer类

在app根目录下创建serializer.py文件

class UserInfoSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = UserInfo
        fields = ('name', 'sex', 'age', 'hobby', 'email', 'phone', 'username', 'safe_code')
    name = serializers.CharField(max_length=200)
    sex = serializers.IntegerField()
    age = serializers.IntegerField()
    hobby = serializers.CharField(max_length=200)
    email = serializers.EmailField()
    phone = serializers.IntegerField()
    username = serializers.CharField(max_length=200)
    # password = serializers.CharField(max_length=200)
    safe_code = serializers.CharField(max_length=200)

    def create(self, validated_data):
        return UserInfo.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.name = validated_data.get('name', instance.name)
        instance.sex = validated_data.get('sex', instance.sex)
        instance.age = validated_data.get('age', instance.age)
        instance.hobby = validated_data.get('hobby', instance.hobby)
        instance.email = validated_data.get('email', instance.email)
        instance.phone = validated_data.get('phone', instance.phone)
        instance.username = validated_data.get('username', instance.username)
        # instance.password = validated_data.get('password', instance.password)
        instance.safe_code = validated_data.get('safe_code', instance.safe_code)
        instance.save()
        return instance
  1. 编写类视图方法views.py
# -*- coding:utf-8 -*-
from application.models import UserInfo
from application.serializers import UserInfoSerializer
from rest_framework import generics

# V1.0
class UserInfoList(generics.ListCreateAPIView):
    queryset = UserInfo.objects.all()
    serializer_class = UserInfoSerializer


class UserInfoDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = UserInfo.objects.all()
    serializer_class = UserInfoSerializer

# V2.0
from rest_framework.viewsets import ModelViewSet
class UsersInfoView(ModelViewSet):
    queryset = UserInfo.objects.all()
    serializer_class = UserInfoSerializer
  1. 注册路由urls.py
# -*- coding:utf-8 -*-

from rest_framework import routers
from django.conf.urls import patterns, include, url
from application import views

router = routers.SimpleRouter()

urlpatterns = patterns(
    url(r'^', include(router.urls)),
    url(r'^user_list/$', views.UserInfoList.as_view()),
    url(r'^user_info/(?P<pk>[0-9]+)/$', views.UserInfoDetail.as_view()),
    url(r'^users/$', views.UsersInfoView.as_view({"get": "list", "post": "create"})),
    url(r'^users/(?P<pk>[0-9]+)/$', views.UsersInfoView.as_view({"put": "update", "delete": "destroy", "get": "retrieve"})),
)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值