资讯专栏INFORMATION COLUMN

关于WEB前后端分离的要点总结(上)

FullStackDeveloper / 1431人阅读

摘要:前言对于前后端分离大家可能在网上可以找到很多的文章。但是,我们今天分享的文章的英文我们的老师对于前后端的分离问题的多年工作经验的总结。今天,我们把这些经验总结知识点分享给大家,希望可以帮助到大家。添加开启黑白名单,任选其一。

前言

对于前后端分离大家可能在网上可以找到很多的文章。但是,我们今天分享的文章的英文我们的老师对于前后端的分离问题的多年工作经验的总结。今天,我们把这些经验总结知识点分享给大家,希望可以帮助到大家。

内容要点

接口格式

增,删,改,查及分页

跨域

ACL访问控制

令牌认证

接口格式

路由格式:

/ API / <模块> /

示例:

/ API /资产/

/ API / DNS /

/ API /监视器/

返回格式:

0表示请求成功,非0表示请求异常

</>复制代码

  1. {u"message": u"ERROR_PROXY_AUTH_FAILED", u"code": -97}
  2. {u"message": u"SUCCESS", u"code": 0}

增,删,改,查及分页

采用django-rest-framework框架提供后端接口服务;

示例:

</>复制代码

  1. # -*- coding: UTF-8 -*-
  2. class StandardResultsSetPagination(pagination.PageNumberPagination):
  3. # 覆盖 settings 中的默认分页
  4. page_size = 10
  5. # page_size_query_param = "page"
  6. # 限制最大分页大小
  7. max_page_size = 10

</>复制代码

  1. class BaseManageView(generics.ListAPIView):
  2. serializer_class = TbRecordsSerializer
  3. model = TbRecords
  4. queryset = TbRecords.objects.all()
  5. pagination_class = StandardResultsSetPagination
  6. parser_classes = (JSONParser,)
  7. def get_object(self, pk):
  8. try:
  9. return TbRecords.objects.get(pk=pk)
  10. except TbRecords.DoesNotExist:
  11. raise Http404
  12. def get(self, request, *args, **kwargs):
  13. # 分页
  14. return super(DnsManageView, self).get(request, *args, **kwargs)
  15. def get_queryset(self):
  16. # 条件搜索
  17. queryset = super(DnsManageView, self).get_queryset()
  18. queryset = self.get_queryset_search(queryset)
  19. return queryset
  20. def get_queryset_search(self, queryset):
  21. queryset = queryset.objects.filter(update_time=F("update_time") + 8)
  22. return queryset
  23. def post(self, request):
  24. # 添加
  25. data = self._parseRequest(request.body)
  26. pass
  27. return apiSucess("SUCCESS", 200)
  28. def put(self, request):
  29. # 修改
  30. data = self._parseRequest(request.body)
  31. pass
  32. return apiSucess("SUCCESS", 200)
  33. def delete(self, request, pk):
  34. # 删除
  35. obj = self.get_object(pk)
  36. obj.delete()
  37. return apiSucess("SUCCESS", 204)
  38. def options(self, request):
  39. # 非分页
  40. data = TbRecords.objects.values()
  41. return apiSucess(data, 200)
  42. def _parseRequest(self, querydict_obj):
  43. # 解析已提交的数据
  44. params = QueryDict(querydict_obj).dict()
  45. if isinstance(params, dict):
  46. if len(params) == 1:
  47. data = json.loads(params.keys()[0])
  48. else:
  49. data = params
  50. elif isinstance(params, list):
  51. pass
  52. else:
  53. pass
  54. return data
跨域

1,通过NGINX的方式

通过在NGINX代理添加标题的方式

</>复制代码

  1. server {
  2. add_header Access-Control-Allow-Origin *;
  3. add_header Access-Control-Allow-Headers X-Requested-With;
  4. add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
  5. }

2,通过后端服务方式

修改project_name / settings.py文件。

(1)添加。

INSTALLED_APPS添加corsheaders

(2)开启黑白名单,任选其一。

</>复制代码

  1. CORS_ORIGIN_ALLOW_ALL = True
  2. CORS_ORIGIN_WHITELIST = (
  3. "*",
  4. "localhost:8000",
  5. "127.0.0.1:9000",
  6. )
ACL访问控制

针对主机的权限控制

示例:

</>复制代码

  1. # -*- coding: UTF-8 -*-
  2. import functools
  3. from rest_framework import status
  4. from rest_framework.response import Response
  5. # 允许的白名单IP地址
  6. ALLECT_ADDR_POOL = (
  7. "127.0.0.1",
  8. )
  9. def AclHost(func):
  10. def wrapper(request, *args, **kwargs):
  11. username = request.request.user
  12. method = request.request.method
  13. if request.request.META.has_key("HTTP_X_FORWARDED_FOR"):
  14. remote_addr = request.request.META["HTTP_X_FORWARDED_FOR"]
  15. else:
  16. remote_addr = request.request.META["REMOTE_ADDR"]
  17. # 有多层代理
  18. if remote_addr.count(",") >=1:
  19. remote_addr = remote_addr.split(",")[-1].strip()
  20. if remote_addr not in ALLECT_ADDR_POOL:
  21. data = {"result" : {"username" : username, "method" : method, "remote_addr" : remote_addr}, "errmsg" : "FORBIDDEN"}
  22. return Response(data, status=status.HTTP_403_FORBIDDEN)
  23. return func(request, *args, **kwargs)
  24. return functools.wraps(func)(wrapper)
令牌认证

针对Token的权限控制

创建用户自动生成Token,基于Token的路由的访问。

示例:

(1)djuser / models.py

</>复制代码

  1. # -*- coding: UTF-8 -*-
  2. from django.conf import settings
  3. from django.db.models.signals import post_save
  4. from django.dispatch import receiver
  5. from rest_framework.authtoken.models import Token
  6. from django.contrib.auth.models import User
  7. # 针对新创建的用户生成token
  8. @receiver(post_save, sender=User)
  9. def create_auth_token(sender, instance=None, created=False, **kwargs):
  10. if created:
  11. Token.objects.create(user=instance)

(2)djuser / views.py

</>复制代码

  1. from rest_framework.authentication import SessionAuthentication, BasicAuthentication, TokenAuthentication
  2. from rest_framework.permissions import IsAuthenticated
  3. from rest_framework.response import Response
  4. from rest_framework.views import APIView
  5. class UserManager(APIView):
  6. # Token验证
  7. authentication_classes = (SessionAuthentication, TokenAuthentication)
  8. permission_classes = (IsAuthenticated,)
  9. def get(self, request, format=None):
  10. content = {
  11. "user": unicode(request.user), # `django.contrib.auth.User` instance.
  12. "auth": unicode(request.auth), # None
  13. }
  14. return Response(content)

原文链接

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41539.html

相关文章

  • 细说 Django—web 前后分离

    摘要:理解这个统一标准的不符规范的资源没有统一实践一个例子图书管理系统技术栈前端后端要点验证前端路由统一的请求响应拦截处理权限控制表级对象级如下图最后,是否要做前后端分离的开发模式,取决于实际情况的多方位考量,适合的才是更好的。 所谓的前后端分离 渊源 前端发展史 特点 前端:负责 View 和 Controller 层 后端:只负责 Model 层,业务处理/数据等 优缺点 优点:解...

    adam1q84 评论0 收藏0
  • 方案设计--如何看待前框架选型 ?

    摘要:纯前端开发主要是针对静态页面。自主权最大,正常是使用进行辅助开发,上线等。大致原因使用是为了和端的保持同步。四总结对于比较正式的项目,前端技术选型策略一定是产品收益最大化,用户在首位。 对于前端团队,可以实现企业受益最大化要点。 一、技术选型的策略 1、保证产品质量 (1)功能稳健:网页不白屏,不错位,不卡死;操作正常;数据精准。 (2)体验优秀:加载体验,交互体验,视觉体验,无障碍访...

    gnehc 评论0 收藏0
  • 重学前学习笔记(一)--前发展史以及学习痛点

    摘要:笔记说明重学前端是程劭非前手机淘宝前端负责人在极客时间开的一个专栏,每天分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的可以加入的专栏学习原文有的语音,如有侵权请联系我,邮箱。 笔记说明 重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的可以...

    hlcfan 评论0 收藏0
  • 重学前学习笔记(一)--前发展史以及学习痛点

    摘要:笔记说明重学前端是程劭非前手机淘宝前端负责人在极客时间开的一个专栏,每天分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的可以加入的专栏学习原文有的语音,如有侵权请联系我,邮箱。 笔记说明 重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的可以...

    wayneli 评论0 收藏0

发表评论

0条评论

FullStackDeveloper

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<