Python Django学习教程

来源:互联网 发布:java方法签名的组成 编辑:程序博客网 时间:2024/05/16 08:27

转自:http://blog.sina.com.cn/s/blog_8a18c33d0101a4bg.html

-----------------因为所有教程均有Python、Django、项目安装等, 在此不再赘述-------------------
-----------------如果转载请注明出处, 如有错误请指出, 谢谢------------------

1.创建一个项目(在此项目名称为app)
    django-admin.py app

2.进入到app目录下可以看到 __init__.py, settings.py, urls.py, manage.py
    __init__.py: 使当前目录变为工作目录
    urls.py: 根据此文件调用对应的视图方法, 本质为URL和视图函数间的映射表, 但是视图函数必须要在Python的搜索路径中
    settings.py: 项目的配置文件
    manage.py: 命令行工具, 用于启动服务器等

3.启动服务器
    python manage.py runserver 8000 #最后的8000为指定的运行端口, 可以去掉

    载入同目录下settings.py, settings.py包含了很多配置, 比如ROO_URLCONF为哪个模块应该用作本网站的URLCONF, 默认为app.urls模块

    在没有部署别的服务器的时候, 这条命令会运行Django自带的开发服务器, 但是可别把此服务器用于线上. 此开发服务器可以自动监测代码改动并自动重新载入. 所以不需要手工重启.

4.Django的工作原理
   Django使用HttpRequest和HttpResponse对象在系统间传递状态.当一个页面被请求时, Django创建一个包含请求元数据的HttpRequest对象.然后Django根据urls.py调用合适的视图函数(所谓视图函数就是接受Web请求, 并返回Web响应的函数, 响应内容可以为HTML, 图片, XML, JSON等), 把HttpRequest作为视图函数的第一个参数传入(其他参数可能是由urls模块匹配出来的).每个视图函数都要负责返回一个HttpResponse对象.

    当服务器收到一个HTTP请求以后, 一个服务器特定的handler(可以了解下WSGI)会创建 HttpRequest并传递给下一个组件并处理.

    这个handler然后调用所有可用的Request或者View中间件, 这些类型的中间件通常是用来增强HttpRequest对象来对一些特别类型的request做些特别处理, 只要其中有一个返回HttpResponse, 系统就跳过对视图的处理.

    即便是最棒的程序员也会有出错的时候, 这个时候异常处理中间件(exception middleware)可以帮你的大忙.如果一个视图函数抛出异常,控制器会传递给异常处理中间件处理.如果这个中间件没有返回HttpResponse ,意味着它不能处理这个异常,这个异常将会再次抛出.

    即便是这样,你也不用担心.Django包含缺省的视图来生成友好的404和500回应(response).

    最后, response middleware做发送HttpResponse给浏览器之前的后处理或者清除请求用到的相关资源.

5.HttpRequest、HttpResponse对象详解

    HttpRequest对象:表示来自客户端的一个单独的HTTP请求, 包含了关于此次请求的大多数重要信息.除了session外的所有属性都应该认为是只读的.

    HttpResponse对象: 与Django自动创建的HttpRequest对象相比, HttpResponse对象则是用户自己创建的. 每个视图都需要实例化、处理、返回一个HttpResponse对象.此类存在于django.http.HttpResponse.

    HttpRequest对象的属性:
        path: 请求页面完整的地址字符串(结尾处有斜线)-不包括域名和参数, 如 /admin/index/
        method: 表示请求使用的HTTP方法, 总是大写的.
            if request.method == 'GET':
                do_something()
            else:
                do_something_else()

        GET/POST/REQUEST: 类字典对象, 不可更改的, 是django.http.QueryDict的实例, 可用来获取参数信息, 分别包含了GET参数信息, POST参数信息,GET和POST综合信息(REQUEST跟PHP中一样是GET和POST的集合).

        COOKIES: 标准的字典, 键值都为字符串.

        FILES: 来自文件上传表单, 值为一个标准的字典, 包含三个键:filename(原文件文件名), content-type(文件的内容类型), content(文件的原始内容);

        META: 包含所有的HTTP头信息, 与PHP的$_SERVER类似.包含CONTENT_LENGTH, CONTENT_TYPE, QUERY_STRING, REMOTE_ADDR, REMOTE_PORT, REMOTE_HOST, SERVER_NAME, SERVER_PORT等; 与PHP类似, 在META中有效的HTTP头信息都是代用HTTP_前缀的键. 例如:HTTP_ACCEPT_ENCODING, HTTP_HOST, HTTP_REFERER, HTTP_USER_AGENT, HTTP_ACCEPT_LANGUAGE;

        user: 暂时未去了解, 待以后补上

        session: 一个可读写的类字典对象, 表示当前的session.使用的前提是Django已激活session支持.

        raw_post_data: POST的原始数据. 用于对数据的复杂处理.

    HttpRequest对象的方法:

        __getitem(key): 获取key对应的GET/POST值, 先找POST后GET, 键不存在则引发KeyError异常.该方法使用户可以以访问字典的方式来访问一个HttpRequest实例. 如request['name'], 和先检查request.GET或request.POST是否包含所给的键一样.

        has_key(): 获取request.GET或者request.POST中是否包含所给的键, 返回True或者False

        get_full_path(): 返回path, 与request.path不同的是包含请求参数

        is_secure(): 返回请求是否是以HTTPS形式提交的.


    HttpResponse:

        以字符串的形式传递页面的内容给HttpResponse的构造函数.可以配置返回头.
        response = HttpResponse("Here is the text of the Web page.")
        response = HttpResponse("Text only, please.", mimetype="text/plain")

        可以把response当做一个类文件对象使用.
        response = HttpResponse()
        response.write("Here is the text of the Web page.")
        response.write("Here is another paragraph.")

    HttpResponse子类:

        HttpResponseRedirect: 构造函数参数为重定向的路径.可以为一个完整的URL地址('http://www.baidu.com/a/b/')或不包括域名的路径('/a/b/').返回的状态码为302重定向.
        HttpResponseNotModified:无修改, 返回304状态码/
        HttpResponseBadRequest: 类似HttpResponse, 返回400状态码.
        HttpResponseNotFound: 类似HttpResponse, 返回404状态码.
        HttpResponseForbidden: 类似HttpResponse, 返回403状态码.
        HttpResponseServerError: 类似HttpResponse, 返回500状态码.
        以上几个都可以代替HttpResponse返回.

6.urls.py详解(此决定了与PHP文件夹层次调用文件的不同)
   
 url.py的本质为URL和视图函数间的映射表(视图函数必须要在Python的搜索路径中, Django项目的搜索路径是在manage.py文件中添加进去的, 可以看一下), 是根据request.path进行匹配的.同时此模块可以匹配出除了request之外的第二个, 第三个等参数(比如url(r'^admin/user/(\w)+/$', 'mysite.views.admin'), 此时mysite.views.main视图函数可以接受第二个参数).但是所有的参数全为字符串.也可以用正则进行匹配, 这里面可不要乱加空格, 我就出现错误了.

    文件内容如下:
        from django.conf.urls import patterns, include, url
        urlpatterns = patterns('',
   
         # Examples:
   
         # url(r'^$', 'mysite.views.home', name='home'),
   
         # url(r'^mysite/', include('mysite.foo.urls')),

   
         # Uncomment the admin/doc line below to enable admin documentation:
   
         # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

   
         # Uncomment the next line to enable the admin:
   
         # url(r'^admin/', include(admin.site.urls)),
        )

    第一行, 从django.conf.urls下导入patterns, include, url函数

    第二行, 调用patterns函数, 并将返回结果保存到urlpatterns变量. patterns()函数第一个参数为视图函数通用前缀, 即公用前缀. urlpatterns即代表了URL到视图函数的映射关系.此处匹配的时候比如随便一个匹配(r'^admin/$', 'mysite.views.admin'), ^$是很重要的分隔符, 进行精确匹配, 如果去掉^则有可能匹配到任意由admin/结束的path, 比如/a/b/admin/等, 而且不必写成^/admin/$, 因为Django进行匹配的时候会自动把前面的"/"加上.

0 0
原创粉丝点击