欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

二、POST 請求參數(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 請求體參數(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)  # 自動轉(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")

六、請求頭信息獲取

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. 獲取請求頭
    client_ip = request.META.get('REMOTE_ADDR')
    
    return JsonResponse(data)

八、注意事項

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.安全驗證

from django.core.exceptions import PermissionDenied

def secure_view(request):
    # 驗證必要參數(shù)存在
    if not all([request.GET.get('token'), request.POST.get('user_id')]):
        raise PermissionDenied
    
    # 參數(shù)白名單驗證
    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ù)獲取方法對比

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

十、最佳實踐建議

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • Python中的函數(shù)作用域

    Python中的函數(shù)作用域

    在python中,一個函數(shù)就是一個作用域。這篇文章重點給大家介紹python中的函數(shù)作用域,感興趣的朋友一起看看吧
    2018-05-05
  • Python元組 tuple的概念與基本操作詳解【定義、創(chuàng)建、訪問、計數(shù)、推導(dǎo)式等】

    Python元組 tuple的概念與基本操作詳解【定義、創(chuàng)建、訪問、計數(shù)、推導(dǎo)式等】

    這篇文章主要介紹了Python元組 tuple的概念與基本操作,結(jié)合實例形式詳細(xì)分析了Python元組的定義、創(chuàng)建、訪問、計數(shù)、推導(dǎo)式等常見操作技巧與操作注意事項,需要的朋友可以參考下
    2019-10-10
  • python中單下劃線與雙下劃線的區(qū)別及說明

    python中單下劃線與雙下劃線的區(qū)別及說明

    這篇文章主要介紹了python中單下劃線與雙下劃線的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Anaconda中利用conda創(chuàng)建、激活、刪除、添加新環(huán)境

    Anaconda中利用conda創(chuàng)建、激活、刪除、添加新環(huán)境

    在使用Python開發(fā)項目或者編寫腳本的時候通常需要建立不同版本的Python的虛擬環(huán)境,本文主要介紹了Anaconda中利用conda創(chuàng)建、激活、刪除、添加新環(huán)境,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • 最新評論