摘要:前言對于前后端分離大家可能在網上可以找到很多的文章。但是,我們今天分享的文章的英文我們的老師對于前后端的分離問題的多年工作經驗的總結。今天,我們把這些經驗總結知識點分享給大家,希望可以幫助到大家。添加開啟黑白名單,任選其一。
前言
對于前后端分離大家可能在網上可以找到很多的文章。但是,我們今天分享的文章的英文我們的老師對于前后端的分離問題的多年工作經驗的總結。今天,我們把這些經驗總結知識點分享給大家,希望可以幫助到大家。
內容要點接口格式
增,刪,改,查及分頁
跨域
ACL訪問控制
令牌認證
接口格式路由格式:
/ API / <模塊> /
示例:
/ API /資產/
/ API / DNS /
/ API /監視器/
返回格式:
0表示請求成功,非0表示請求異常
{u"message": u"ERROR_PROXY_AUTH_FAILED", u"code": -97} {u"message": u"SUCCESS", u"code": 0}
增,刪,改,查及分頁
采用django-rest-framework框架提供后端接口服務;
示例:
# -*- coding: UTF-8 -*- class StandardResultsSetPagination(pagination.PageNumberPagination): # 覆蓋 settings 中的默認分頁 page_size = 10 # page_size_query_param = "page" # 限制最大分頁大小 max_page_size = 10
class BaseManageView(generics.ListAPIView): serializer_class = TbRecordsSerializer model = TbRecords queryset = TbRecords.objects.all() pagination_class = StandardResultsSetPagination parser_classes = (JSONParser,) def get_object(self, pk): try: return TbRecords.objects.get(pk=pk) except TbRecords.DoesNotExist: raise Http404 def get(self, request, *args, **kwargs): # 分頁 return super(DnsManageView, self).get(request, *args, **kwargs) def get_queryset(self): # 條件搜索 queryset = super(DnsManageView, self).get_queryset() queryset = self.get_queryset_search(queryset) return queryset def get_queryset_search(self, queryset): queryset = queryset.objects.filter(update_time=F("update_time") + 8) return queryset def post(self, request): # 添加 data = self._parseRequest(request.body) pass return apiSucess("SUCCESS", 200) def put(self, request): # 修改 data = self._parseRequest(request.body) pass return apiSucess("SUCCESS", 200) def delete(self, request, pk): # 刪除 obj = self.get_object(pk) obj.delete() return apiSucess("SUCCESS", 204) def options(self, request): # 非分頁 data = TbRecords.objects.values() return apiSucess(data, 200) def _parseRequest(self, querydict_obj): # 解析已提交的數據 params = QueryDict(querydict_obj).dict() if isinstance(params, dict): if len(params) == 1: data = json.loads(params.keys()[0]) else: data = params elif isinstance(params, list): pass else: pass return data跨域
1,通過NGINX的方式
通過在NGINX代理添加標題的方式
server { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; }
2,通過后端服務方式
修改project_name / settings.py文件。
(1)添加。
INSTALLED_APPS添加corsheaders
(2)開啟黑白名單,任選其一。
CORS_ORIGIN_ALLOW_ALL = True CORS_ORIGIN_WHITELIST = ( "*", "localhost:8000", "127.0.0.1:9000", )ACL訪問控制
針對主機的權限控制
示例:
# -*- coding: UTF-8 -*- import functools from rest_framework import status from rest_framework.response import Response # 允許的白名單IP地址 ALLECT_ADDR_POOL = ( "127.0.0.1", ) def AclHost(func): def wrapper(request, *args, **kwargs): username = request.request.user method = request.request.method if request.request.META.has_key("HTTP_X_FORWARDED_FOR"): remote_addr = request.request.META["HTTP_X_FORWARDED_FOR"] else: remote_addr = request.request.META["REMOTE_ADDR"] # 有多層代理 if remote_addr.count(",") >=1: remote_addr = remote_addr.split(",")[-1].strip() if remote_addr not in ALLECT_ADDR_POOL: data = {"result" : {"username" : username, "method" : method, "remote_addr" : remote_addr}, "errmsg" : "FORBIDDEN"} return Response(data, status=status.HTTP_403_FORBIDDEN) return func(request, *args, **kwargs) return functools.wraps(func)(wrapper)令牌認證
針對Token的權限控制
創建用戶自動生成Token,基于Token的路由的訪問。
示例:
(1)djuser / models.py
# -*- coding: UTF-8 -*- from django.conf import settings from django.db.models.signals import post_save from django.dispatch import receiver from rest_framework.authtoken.models import Token from django.contrib.auth.models import User # 針對新創建的用戶生成token @receiver(post_save, sender=User) def create_auth_token(sender, instance=None, created=False, **kwargs): if created: Token.objects.create(user=instance)
(2)djuser / views.py
from rest_framework.authentication import SessionAuthentication, BasicAuthentication, TokenAuthentication from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView class UserManager(APIView): # Token驗證 authentication_classes = (SessionAuthentication, TokenAuthentication) permission_classes = (IsAuthenticated,) def get(self, request, format=None): content = { "user": unicode(request.user), # `django.contrib.auth.User` instance. "auth": unicode(request.auth), # None } return Response(content)
原文鏈接
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41539.html
摘要:理解這個統一標準的不符規范的資源沒有統一實踐一個例子圖書管理系統技術棧前端后端要點驗證前端路由統一的請求響應攔截處理權限控制表級對象級如下圖最后,是否要做前后端分離的開發模式,取決于實際情況的多方位考量,適合的才是更好的。 所謂的前后端分離 淵源 前端發展史 特點 前端:負責 View 和 Controller 層 后端:只負責 Model 層,業務處理/數據等 優缺點 優點:解...
摘要:純前端開發主要是針對靜態頁面。自主權最大,正常是使用進行輔助開發,上線等。大致原因使用是為了和端的保持同步。四總結對于比較正式的項目,前端技術選型策略一定是產品收益最大化,用戶在首位。 對于前端團隊,可以實現企業受益最大化要點。 一、技術選型的策略 1、保證產品質量 (1)功能穩健:網頁不白屏,不錯位,不卡死;操作正常;數據精準。 (2)體驗優秀:加載體驗,交互體驗,視覺體驗,無障礙訪...
摘要:筆記說明重學前端是程劭非前手機淘寶前端負責人在極客時間開的一個專欄,每天分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以加入的專欄學習原文有的語音,如有侵權請聯系我,郵箱。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以...
摘要:筆記說明重學前端是程劭非前手機淘寶前端負責人在極客時間開的一個專欄,每天分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以加入的專欄學習原文有的語音,如有侵權請聯系我,郵箱。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以...
閱讀 1110·2021-09-22 16:04
閱讀 1494·2019-08-30 15:43
閱讀 1097·2019-08-29 14:01
閱讀 3437·2019-08-26 12:19
閱讀 3351·2019-08-26 12:15
閱讀 1443·2019-08-26 12:13
閱讀 3263·2019-08-23 17:00
閱讀 1482·2019-08-23 15:38