国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關于WEB前后端分離的要點總結(上)

FullStackDeveloper / 1395人閱讀

摘要:前言對于前后端分離大家可能在網上可以找到很多的文章。但是,我們今天分享的文章的英文我們的老師對于前后端的分離問題的多年工作經驗的總結。今天,我們把這些經驗總結知識點分享給大家,希望可以幫助到大家。添加開啟黑白名單,任選其一。

前言

對于前后端分離大家可能在網上可以找到很多的文章。但是,我們今天分享的文章的英文我們的老師對于前后端的分離問題的多年工作經驗的總結。今天,我們把這些經驗總結知識點分享給大家,希望可以幫助到大家。

內容要點

接口格式

增,刪,改,查及分頁

跨域

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

相關文章

  • 細說 Django—web 前后分離

    摘要:理解這個統一標準的不符規范的資源沒有統一實踐一個例子圖書管理系統技術棧前端后端要點驗證前端路由統一的請求響應攔截處理權限控制表級對象級如下圖最后,是否要做前后端分離的開發模式,取決于實際情況的多方位考量,適合的才是更好的。 所謂的前后端分離 淵源 前端發展史 特點 前端:負責 View 和 Controller 層 后端:只負責 Model 層,業務處理/數據等 優缺點 優點:解...

    adam1q84 評論0 收藏0
  • 方案設計--如何看待前框架選型 ?

    摘要:純前端開發主要是針對靜態頁面。自主權最大,正常是使用進行輔助開發,上線等。大致原因使用是為了和端的保持同步。四總結對于比較正式的項目,前端技術選型策略一定是產品收益最大化,用戶在首位。 對于前端團隊,可以實現企業受益最大化要點。 一、技術選型的策略 1、保證產品質量 (1)功能穩健:網頁不白屏,不錯位,不卡死;操作正常;數據精準。 (2)體驗優秀:加載體驗,交互體驗,視覺體驗,無障礙訪...

    gnehc 評論0 收藏0
  • 重學前學習筆記(一)--前發展史以及學習痛點

    摘要:筆記說明重學前端是程劭非前手機淘寶前端負責人在極客時間開的一個專欄,每天分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以加入的專欄學習原文有的語音,如有侵權請聯系我,郵箱。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以...

    wayneli 評論0 收藏0
  • 重學前學習筆記(一)--前發展史以及學習痛點

    摘要:筆記說明重學前端是程劭非前手機淘寶前端負責人在極客時間開的一個專欄,每天分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以加入的專欄學習原文有的語音,如有侵權請聯系我,郵箱。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以...

    davidac 評論0 收藏0

發表評論

0條評論

FullStackDeveloper

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<