当前位置: 代码网 > it编程>前端脚本>Python > Django获取请求参数的常用方式

Django获取请求参数的常用方式

2025年05月28日 Python 我要评论
在 django 中获取请求参数的完整方法如下:一、get 请求参数获取def view_func(request): # 获取单个参数(推荐方式) name = request.get.

在 django 中获取请求参数的完整方法如下:

一、get 请求参数获取

def view_func(request):
    # 获取单个参数(推荐方式)
    name = request.get.get('name', 'default')  # 带默认值
    age = request.get.get('age', 0)
    
    # 获取多个同名参数(如复选框)
    ids = request.get.getlist('ids[]')  # 返回列表
    
    # 获取所有参数
    all_params = request.get.dict()  # 返回字典

二、post 请求参数获取

def view_func(request):
    # 表单数据获取
    if request.method == 'post':
        username = request.post.get('username')
        password = request.post.get('password')
        
        # 处理多选数据
        hobbies = request.post.getlist('hobbies')
        
        # 获取所有参数
        post_data = request.post.dict()

三、json 请求体参数获取

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 路径参数获取

# 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):
    # 直接获取路径参数
    print(user_id)  # 自动转换为整数

五、文件上传处理

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. 获取路径参数
    print(f"product id: {product_id}")
    
    # 2. 获取get参数
    page = request.get.get('page', 1)
    search = request.get.get('q', '')
    
    # 3. 获取post参数
    if request.method == 'post':
        data = {
            'form_data': request.post.dict(),
            'json_data': {}
        }
        
        # 4. 处理json数据
        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.参数类型转换

# 安全转换示例
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):
    # 验证必要参数存在
    if not all([request.get.get('token'), request.post.get('user_id')]):
        raise permissiondenied
    
    # 参数白名单验证
    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)

九、参数获取方法对比

参数位置获取方式适用场景
url 查询字符串request.get过滤、分页、搜索参数
表单数据request.post传统表单提交
json 数据json.loads(request.body)api 接口、ajax 请求
路径参数视图函数参数restful 资源定位
文件上传request.files文件上传表单
请求头信息request.meta/request.headers认证、客户端信息获取

十、最佳实践建议

始终对用户输入进行验证和清理

优先使用 get() 方法避免 keyerror

对数值型参数进行类型转换和范围验证

使用 drf 的 serializer 处理复杂参数验证

对敏感参数使用 https 传输

限制 get 参数的最大长度(django 默认 2500 字符)

完整示例项目结构:

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

到此这篇关于django获取请求参数的常用方式的文章就介绍到这了,更多相关django获取请求参数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com