Django 规范化编程10

Task12 Restful

关于Rest, 我应该在其他的文章中涉及到那么一点点。(如果你们在我的文章中没看到过说明是在我还没发出去的半成品) 简单说以下为什么要用Restful. Restful实际上是早就出现了,但是无论在哪中设计理念上都有着非常重要的含义。就最近的我们的微服务框架来说,在服务与服务之间的相互调用的过程中,Rest规范是将我们服务之间调用的一种格式。没有Rest服务的调用就会变得非常麻烦,而且没统一标准的请求与响应,不同服务间的适配就会麻烦的上天。所以我们要学习Rest(以上是我的理解)好的,接下来优势喜喜喜喜闻乐见的Django Restful 官网的放置:https://www.django-rest-framework.org/。 (中文请自行github follower) Django Restful framework 也就是我们所说的drf, 广泛的用于开发中

那么什么是Restful? **REST:表述性状态传递,即 (Representational State Transfer ) **是2000年就提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂强行,提高系统的可伸缩性。Restful API的设计规范: http://wangwei.info/about-rest-api/

Restful API的四大基本原则:

  • 为每个资源设计URI
  • 通过XML / JSON 进行数据传输
  • 无状态连接, 服务端不应保存过多的续航下文状态
  • 使用HTTP 的方法涵盖 GET POST PUT DELETE

DRF 能够做到什么:

  1. 可以写一个Web API, 即不受语言, 地域等限制
  2. 可以对接口进行授权认证,使用OAuth1a /OAuth2 协议 (关于协议我后面会更新,大概。文档放着,有空拜读https://datatracker.ietf.org/doc/html/rfc6749 这是RFC是一定要看的

说了这么多概念,咱就Django里使用RESTful编程,Rest定义路由 --》请求 --》数据库获取数据 --》 模型序列化 --》 响应数据

入门还是要按照官方文档走的,第一步必然是pip. DRF设计web API的时候官网给了几个可视化的包咱就不装了。

pip install djangorestframework

任何一个插件的使用都需要在setting中注册,并进行一定的配置:

# settings.py
INSTALLED_APPS = [
    ...
     'rest_framework'
]
# 配置RESTful:
REST_FRAMEWORK= {
    # 默认访问权限,更多模式直接去源码里面反翻就好了
    'DEFAULT_PERMISSION_CLASSES':'rest_framework.permissions.IsAuthenticatedOrReadOnly',
}

基本配置就完成了,接下来我们以之前的游戏模型创建一个简单的REST实例

# serializer.py(自己新建的,随便什么名字)  序列化
from rest_framework import serializers
from .models import GameMaker

# 定义一个模型序列化类,继承serializers.Serializer.这里可以继承的方法多的是,还是那句话,翻源码。
# 我结合了快速入门和普通教程魔改了一下
class GameMakerSerializer(serializers.HyperlinkedModelSerializer):
    def create(self, validated_data):
        return GameMaker.objects.save(**validated_data)
	
	# 元数据,使用的模型与返回时展示的字段的定义。更多源码都有
    class Meta:
        model = GameMaker
        fields = ['gamer_name','gamer_num']


#urls.py   Rest路由(不完全)
urlpatterns = [
    path('gamemaker/<str:name>/', get_GameMaker),
]

# views.py的响应
def get_GameMaker(request:HttpRequest,name):
    if GameMaker.objects.get(gamer_name=name):
        game_maker = GameMaker.objects.get(gamer_name=name)
    else:
        return HttpResponse('404')

    # 序列化
    serializer_game_maker = GameMakerSerializer(game_maker)
    return JsonResponse(serializer_game_maker.data)

我们去访问的时候就能轻松的搞定

在这里插入图片描述

当然,Restful框架不仅仅只提供序列化这个强大的功能。我们上面说过,REST是基于URI的,换句话来说,不能定义路由的框架咱么敢大放阙词REST。 所以Restful框架中尉我们提供了路由的扩展:router

# 以下是官方示例中快速入门的一段代码
# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
# UserViewSet是viewsets.ModelViewSet的子类,需要定义queryset 和 serialize_class 属性
router.register(r'users', UserViewSet)
urlpatterns = [
    path('', include(router.urls)),
    # 授权的API,查看已有的接口
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

# 关于register函数,他是在BaseRouter的方法(继承来的):
def register(self, prefix, viewset, basename=None):
    if basename is None:
        basename = self.get_default_basename(viewset)
    self.registry.append((prefix, viewset, basename))
    # invalidate the urls cache
    if hasattr(self, '_urls'):
        del self._urls

OK, Django的学习告一段落!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值