`

python web开发框架 - 之 Django Request

阅读更多
使用例子:
>>> from django.http import *
>>> request = HttpRequest()
>>> request.__doc__
>>> help(request)
>>> request.META
29: {}
>>> request.is_ajax()
30: False
>>> request.GET
31: {}
>>> request.FILES
32: {}



以下是request 的源码:
class HttpRequest(object):
    """A basic HTTP request."""

    # The encoding used in GET/POST dicts. None means use default setting.
    _encoding = None
    _upload_handlers = []

    def __init__(self):
        self.GET, self.POST, self.COOKIES, self.META, self.FILES = {}, {}, {}, {}, {}
        self.path = ''
        self.path_info = ''
        self.method = None

    def __repr__(self):
        return '<HttpRequest\nGET:%s,\nPOST:%s,\nCOOKIES:%s,\nMETA:%s>' % \
            (pformat(self.GET), pformat(self.POST), pformat(self.COOKIES),
            pformat(self.META))

    def get_host(self):
        """Returns the HTTP host using the environment or request headers."""
        # We try three options, in order of decreasing preference.
        if 'HTTP_X_FORWARDED_HOST' in self.META:
            host = self.META['HTTP_X_FORWARDED_HOST']
        elif 'HTTP_HOST' in self.META:
            host = self.META['HTTP_HOST']
        else:
            # Reconstruct the host using the algorithm from PEP 333.
            host = self.META['SERVER_NAME']
            server_port = str(self.META['SERVER_PORT'])
            if server_port != (self.is_secure() and '443' or '80'):
                host = '%s:%s' % (host, server_port)
        return host

    def get_full_path(self):
        return ''

    def build_absolute_uri(self, location=None):
        """
        Builds an absolute URI from the location and the variables available in
        this request. If no location is specified, the absolute URI is built on
        ``request.get_full_path()``.
        """
        if not location:
            location = self.get_full_path()
        if not absolute_http_url_re.match(location):
            current_uri = '%s://%s%s' % (self.is_secure() and 'https' or 'http',
                                         self.get_host(), self.path)
            location = urljoin(current_uri, location)
        return iri_to_uri(location)

    def is_secure(self):
        return os.environ.get("HTTPS") == "on"

    def is_ajax(self):
        return self.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'

    def _set_encoding(self, val):
        """
        Sets the encoding used for GET/POST accesses. If the GET or POST
        dictionary has already been created, it is removed and recreated on the
        next access (so that it is decoded correctly).
        """
        self._encoding = val
        if hasattr(self, '_get'):
            del self._get
        if hasattr(self, '_post'):
            del self._post

    def _get_encoding(self):
        return self._encoding

    encoding = property(_get_encoding, _set_encoding)

    def _initialize_handlers(self):
        self._upload_handlers = [uploadhandler.load_handler(handler, self)
                                 for handler in settings.FILE_UPLOAD_HANDLERS]

    def _set_upload_handlers(self, upload_handlers):
        if hasattr(self, '_files'):
            raise AttributeError("You cannot set the upload handlers after the upload has been processed.")
        self._upload_handlers = upload_handlers

    def _get_upload_handlers(self):
        if not self._upload_handlers:
            # If thre are no upload handlers defined, initialize them from settings.
            self._initialize_handlers()
        return self._upload_handlers

    upload_handlers = property(_get_upload_handlers, _set_upload_handlers)

    def parse_file_upload(self, META, post_data):
        """Returns a tuple of (POST QueryDict, FILES MultiValueDict)."""
        self.upload_handlers = ImmutableList(
            self.upload_handlers,
            warning = "You cannot alter upload handlers after the upload has been processed."
        )
        parser = MultiPartParser(META, post_data, self.upload_handlers, self.encoding)
        return parser.parse()
分享到:
评论
1 楼 范三山 2010-03-04  
汗,api 小王子转战python 版了吗

相关推荐

    Python-用于Djangoweb框架的PEP484类型提示绑定

    **Python-用于Djangoweb框架的PEP484类型提示绑定** 在Python编程中,类型提示(Type Hints)是一种强大的工具,它能够帮助开发者在编写代码时明确表达变量、函数参数和返回值的预期类型。PEP 484是Python中的一个...

    pythonDjango-django简介、django安装、创建项目、快速上手-python django

    Django 是一个用 Python 编写的高级 Web 开发框架,其设计理念在于通过减少重复工作并提供一个清晰的结构来加速 Web 应用程序的开发速度。Django 遵循 MVC(Model-View-Controller)架构模式的一种变体——MTV...

    Python库 | social-auth-app-django-1.0.0.tar.gz

    Django,作为Python最流行的Web开发框架之一,以其高效、安全和易用性著称。而`social-auth-app-django`则是Django生态系统中的一员,专注于社交登录的实现。它利用了`python-social-auth`这个核心库,为Django项目...

    Python中django学习心得

    Django是一款基于Python语言的开源Web开发框架,它遵循MVC(Model-View-Controller)设计模式,旨在简化Web开发流程,提高开发效率。以下内容将详细探讨Django中的URL配置、反向解析、包含其他URL配置以及正则字符串...

    实验11-基于Django框架Web开发之框架基本应用.docx

    【实验目的】本次实验旨在让学生掌握Python的高阶框架Django,用于构建Web应用程序。通过实验,学生应能够独立使用PyCharm创建Django项目,理解并编写视图,以及启动和管理项目。 【实验要求】实验结束后,学生应...

    Python库 | auto-pull-request-7.1.6.tar.gz

    Python在后端开发中有着重要的角色,通过框架如Django、Flask等,可以快速构建高效稳定的服务器端应用。 "zookeeper"是Apache的一个开源项目,提供分布式服务管理和配置协调。在分布式系统中,ZooKeeper可以帮助...

    Python-使用Django来介绍CSRFandCookiesSession

    在Python的Web开发领域,Django是一个非常流行的高级框架,它提供了一系列强大的工具来帮助开发者构建安全、高效的应用。在这个教程中,我们将深入探讨Django中的两个关键概念:CSRF(跨站请求伪造)和Cookie及...

    Python Web框架之Django框架cookie和session用法分析

    Django是一个高级的Python Web框架,它鼓励快速开发和干净、实用的设计。Web开发中的一个关键概念是如何管理用户的会话,以及如何在用户的浏览器和服务器之间存储状态信息。在Web开发中,常用的两种方法是使用cookie...

    PythonWeb开发基础教程-第5章-视图.pptx

    在Python Web开发中,Django框架是一个非常流行的MVT(Model-Template-View)架构的实现,其中View(视图)扮演着核心角色。视图是处理用户请求并生成相应内容的关键部分,它实现了业务逻辑并决定了如何响应用户的...

    django-middleware-global-request-0.2.0.tar.gz

    在Python的Web开发框架Django中,Middleware(中间件)是一种强大的工具,它允许开发者插入自定义的行为到Django的请求处理流程中。标题提到的"django-middleware-global-request-0.2.0.tar.gz"是一个针对Django的...

    Python库 | django-vies-1.0.0.tar.gz

    Django是Python的一种流行Web框架,遵循“DRY”(Don't Repeat Yourself)原则,它提供了一套全面的解决方案,包括模型-视图-控制器(MVC)架构、ORM(对象关系映射)、自动管理后台、表单处理、身份验证和授权等。...

    Python-djangosocketio给Django用的WebSockets

    `django-socketio` 是一个扩展,用于在 Django 框架中集成 WebSocket 协议,使得 Web 应用能够实现双向实时通信。WebSocket 提供了一种持久化的连接方式,相较于传统的 HTTP 请求,它能够显著提升数据传输效率和实时...

    Python库 | django_request_token-0.14.1-py3-none-any.whl

    Django是一个用Python编写的高级Web框架,遵循模型-视图-控制器(MVC)设计模式,用于快速开发安全且可维护的网站。它提供了许多内置功能,如数据库管理、URL路由、模板系统、表单处理以及身份验证和授权。Django...

    Python开源的Web框架Django.zip

    Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 Web 应用程序框架。使用 Django,我们在几分钟之内就可以创建高品质、易维护、数据库驱动的应用程序。Django 框架的核心组件有:用于创建...

    Python-Django材料管理系统实践

    1. Django框架:Django是Python领域的一款高级Web开发框架,它遵循模型-视图-控制器(MVC)设计模式。Django提供了一整套包括URL路由、数据库模型、模板引擎和表单处理在内的工具,简化了Web应用的开发过程。在这个...

    Python库 | django-read-only-admin-0.17.4.zip

    在Python的Web开发领域,Django框架以其高效、灵活和强大的特性深受开发者喜爱。而Django-read-only-admin是一个针对Django框架的扩展库,它允许开发者轻松地将Django管理后台设置为只读模式,以防止未经许可的修改...

    Python库 | django-buckets-0.1.7.tar.gz

    `django-buckets-0.1.7.tar.gz` 是一个基于Python编程语言的后端开发库,特别为Django框架设计。Django是著名的Web开发框架,它以快速开发、安全和可维护性著称。`django-buckets` 是Django生态中的一个重要组件,它...

    毕业设计基于pythonWeb开发Django框架的图书商城管理系统源码+演示视频.zip

    其中,Django框架以其高效、安全和可扩展性,成为了Python Web开发的首选之一。本资源提供了一个基于Django框架的图书商城管理系统的完整源码,以及配套的演示视频,旨在帮助学习者理解和实践Django的Web应用开发。 ...

    Python-Django消息库用于从传输方法中分离内容

    在Python的Web开发领域,Django是一个非常流行的高级框架,它提供了一系列强大的工具来帮助开发者构建高效、可扩展的Web应用。"Python-Django消息库用于从传输方法中分离内容"这一主题,主要关注的是Django框架中的...

    Python库 | django-database-storage-0.1.0.tar.gz

    Django是一个高度流行和强大的Web应用框架,它采用模型-视图-控制器(MVC)架构模式,用Python编写。在Django中,处理静态文件和上传文件是常见的需求,而`django-database-storage`则提供了这样的功能,允许开发者...

Global site tag (gtag.js) - Google Analytics