最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django獲取請(qǐng)求參數(shù)的常用方式

 更新時(shí)間:2025年05月28日 10:07:27   作者:流煙默  
這篇文章主要為大家詳細(xì)介紹了在Django中獲取請(qǐng)求參數(shù)的幾種常用方式,文中展示里具體的實(shí)現(xiàn)示例代碼,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在 Django 中獲取請(qǐng)求參數(shù)的完整方法如下:

一、GET 請(qǐng)求參數(shù)獲取

def view_func(request):
    # 獲取單個(gè)參數(shù)(推薦方式)
    name = request.GET.get('name', 'default')  # 帶默認(rèn)值
    age = request.GET.get('age', 0)
    
    # 獲取多個(gè)同名參數(shù)(如復(fù)選框)
    ids = request.GET.getlist('ids[]')  # 返回列表
    
    # 獲取所有參數(shù)
    all_params = request.GET.dict()  # 返回字典

二、POST 請(qǐng)求參數(shù)獲取

def view_func(request):
    # 表單數(shù)據(jù)獲取
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        
        # 處理多選數(shù)據(jù)
        hobbies = request.POST.getlist('hobbies')
        
        # 獲取所有參數(shù)
        post_data = request.POST.dict()

三、JSON 請(qǐng)求體參數(shù)獲取

import json

def view_func(request):
    if request.method == 'POST':
        try:
            data = json.loads(request.body)
            username = data.get('username')
            age = data.get('age')
        except json.JSONDecodeError:
            return HttpResponseBadRequest("Invalid JSON")

四、URL 路徑參數(shù)獲取

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('user/<int:user_id>/', views.user_detail),
]

# views.py
def user_detail(request, user_id):
    # 直接獲取路徑參數(shù)
    print(user_id)  # 自動(dòng)轉(zhuǎn)換為整數(shù)

五、文件上傳處理

def upload_file(request):
    if request.method == 'POST':
        uploaded_file = request.FILES.get('myfile')
        if uploaded_file:
            # 保存文件到指定位置
            with open(f'uploads/{uploaded_file.name}', 'wb+') as destination:
                for chunk in uploaded_file.chunks():
                    destination.write(chunk)
            return HttpResponse("File uploaded")

六、請(qǐng)求頭信息獲取

def get_headers(request):
    user_agent = request.META.get('HTTP_USER_AGENT')
    content_type = request.META.get('CONTENT_TYPE')
    auth_token = request.headers.get('Authorization')  # Django 2.2+

七、綜合示例

def complex_example(request, product_id):
    # 1. 獲取路徑參數(shù)
    print(f"Product ID: {product_id}")
    
    # 2. 獲取GET參數(shù)
    page = request.GET.get('page', 1)
    search = request.GET.get('q', '')
    
    # 3. 獲取POST參數(shù)
    if request.method == 'POST':
        data = {
            'form_data': request.POST.dict(),
            'json_data': {}
        }
        
        # 4. 處理JSON數(shù)據(jù)
        if request.content_type == 'application/json':
            try:
                data['json_data'] = json.loads(request.body)
            except json.JSONDecodeError:
                pass
    
    # 5. 獲取文件
    uploaded_file = request.FILES.get('attachment')
    
    # 6. 獲取請(qǐng)求頭
    client_ip = request.META.get('REMOTE_ADDR')
    
    return JsonResponse(data)

八、注意事項(xiàng)

1.參數(shù)類型轉(zhuǎn)換

# 安全轉(zhuǎn)換示例
def safe_conversion(request):
    page = request.GET.get('page', '1')
    try:
        page_num = int(page)
    except ValueError:
        page_num = 1
    
    is_admin = request.GET.get('admin', 'false').lower() == 'true'

2.安全驗(yàn)證

from django.core.exceptions import PermissionDenied

def secure_view(request):
    # 驗(yàn)證必要參數(shù)存在
    if not all([request.GET.get('token'), request.POST.get('user_id')]):
        raise PermissionDenied
    
    # 參數(shù)白名單驗(yàn)證
    allowed_params = {'page', 'sort', 'filter'}
    if not set(request.GET.keys()).issubset(allowed_params):
        return HttpResponseBadRequest("Invalid parameters")

3.Django REST Framework 方式

# serializers.py
from rest_framework import serializers

class UserSerializer(serializers.Serializer):
    username = serializers.CharField()
    email = serializers.EmailField()

# views.py
from rest_framework.decorators import api_view
from rest_framework.response import Response

@api_view(['POST'])
def drf_example(request):
    serializer = UserSerializer(data=request.data)
    if serializer.is_valid():
        username = serializer.validated_data['username']
        return Response({'status': 'success'})
    return Response(serializer.errors, status=400)

九、參數(shù)獲取方法對(duì)比

參數(shù)位置獲取方式適用場(chǎng)景
URL 查詢字符串request.GET過(guò)濾、分頁(yè)、搜索參數(shù)
表單數(shù)據(jù)request.POST傳統(tǒng)表單提交
JSON 數(shù)據(jù)json.loads(request.body)API 接口、AJAX 請(qǐng)求
路徑參數(shù)視圖函數(shù)參數(shù)RESTful 資源定位
文件上傳request.FILES文件上傳表單
請(qǐng)求頭信息request.META/request.headers認(rèn)證、客戶端信息獲取

十、最佳實(shí)踐建議

始終對(duì)用戶輸入進(jìn)行驗(yàn)證和清理

優(yōu)先使用 get() 方法避免 KeyError

對(duì)數(shù)值型參數(shù)進(jìn)行類型轉(zhuǎn)換和范圍驗(yàn)證

使用 DRF 的 Serializer 處理復(fù)雜參數(shù)驗(yàn)證

對(duì)敏感參數(shù)使用 HTTPS 傳輸

限制 GET 參數(shù)的最大長(zhǎng)度(Django 默認(rèn) 2500 字符)

完整示例項(xiàng)目結(jié)構(gòu):

myproject/
├── myapp/
│   ├── views.py
│   ├── urls.py
│   └── serializers.py
├── utils/
│   └── param_utils.py
└── myproject/
    ├── settings.py
    └── urls.py

到此這篇關(guān)于Django獲取請(qǐng)求參數(shù)的常用方式的文章就介紹到這了,更多相關(guān)Django獲取請(qǐng)求參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python multiprocess pool模塊報(bào)錯(cuò)pickling error問(wèn)題解決方法分析

    Python multiprocess pool模塊報(bào)錯(cuò)pickling error問(wèn)題解決方法分析

    這篇文章主要介紹了Python multiprocess pool模塊報(bào)錯(cuò)pickling error問(wèn)題解決方法,結(jié)合實(shí)例形式分析了multiprocess pool模塊報(bào)錯(cuò)pickling error的原因與解決方法,需要的朋友可以參考下
    2019-03-03
  • Python中內(nèi)置函數(shù)append()、extend()的用法及區(qū)別詳解

    Python中內(nèi)置函數(shù)append()、extend()的用法及區(qū)別詳解

    這篇文章主要介紹了Python中內(nèi)置函數(shù)append()、extend()的用法及區(qū)別,還探討了append()函數(shù)添加列表時(shí)發(fā)生的同步變化問(wèn)題,并提供了解決方案,需要的朋友可以參考下
    2025-03-03
  • Python 居然可以在 Excel 中畫畫你知道嗎

    Python 居然可以在 Excel 中畫畫你知道嗎

    哈嘍,哈嘍~對(duì)于Excel大家想到的是不是各種圖表制作,今天我們來(lái)個(gè)不一樣的。十字繡大家都知道吧,今天咱們來(lái)玩?zhèn)€電子版的十字繡
    2022-02-02
  • python發(fā)送byte數(shù)據(jù)組到tcp的server問(wèn)題

    python發(fā)送byte數(shù)據(jù)組到tcp的server問(wèn)題

    這篇文章主要介紹了python發(fā)送byte數(shù)據(jù)組到tcp的server問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python實(shí)現(xiàn)敏感詞檢測(cè)的多種方案

    Python實(shí)現(xiàn)敏感詞檢測(cè)的多種方案

    在互聯(lián)網(wǎng)內(nèi)容審核、社交平臺(tái)監(jiān)管、評(píng)論系統(tǒng)過(guò)濾等場(chǎng)景中,敏感詞檢測(cè)是一項(xiàng)必不可少的功能,本文將詳細(xì)介紹幾種主流的實(shí)現(xiàn)方式,并分析各自的優(yōu)缺點(diǎn)及適用場(chǎng)景,需要的朋友可以參考下
    2026-04-04
  • Python中的請(qǐng)求重試策略深入探討

    Python中的請(qǐng)求重試策略深入探討

    在網(wǎng)絡(luò)通信中,由于各種原因,請(qǐng)求可能會(huì)失敗,為了增加程序的健壯性和可靠性,實(shí)現(xiàn)一個(gè)優(yōu)雅的請(qǐng)求重試策略是至關(guān)重要的,本文將深入探討如何在Python中實(shí)現(xiàn)優(yōu)雅的請(qǐng)求重試,通過(guò)豐富的示例代碼和詳細(xì)的解釋,幫助大家更好地理解和應(yīng)用重試機(jī)制
    2024-01-01
  • 使用Python做垃圾分類的原理及實(shí)例代碼附源碼

    使用Python做垃圾分類的原理及實(shí)例代碼附源碼

    這篇文章主要介紹了用Python做垃圾分類的實(shí)現(xiàn)原理,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-07-07
  • Python利用自帶模塊實(shí)現(xiàn)屏幕像素高效操作

    Python利用自帶模塊實(shí)現(xiàn)屏幕像素高效操作

    這篇文章主要為大家詳細(xì)介紹了Python如何利用自帶模塊實(shí)現(xiàn)屏幕像素高效操作,文中的示例代碼講解詳,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • Python lambda 匿名函數(shù)優(yōu)點(diǎn)和局限性深度總結(jié)

    Python lambda 匿名函數(shù)優(yōu)點(diǎn)和局限性深度總結(jié)

    這篇文章主要為大家介紹了Python lambda 匿名函數(shù)的優(yōu)點(diǎn)和局限性深度總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Python中如何向函數(shù)傳遞列表

    Python中如何向函數(shù)傳遞列表

    本文主要介紹了Python中如何向函數(shù)傳遞列表,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評(píng)論

肇东市| 桂平市| 镇巴县| 巴林左旗| 永州市| 乌鲁木齐市| 黑水县| 桃园市| 高邮市| 中卫市| 苍南县| 浦江县| 调兵山市| 湖南省| 铅山县| 永和县| 长泰县| 连山| 夏津县| 蒙城县| 松阳县| 陵水| 衡阳市| 仁怀市| 简阳市| 盐城市| 阳东县| 乌拉特前旗| 五原县| 巴林右旗| 宜阳县| 广河县| 明光市| 罗山县| 古交市| 永和县| 札达县| 尼玛县| 芦溪县| 沂水县| 兴化市|