• django学习笔记(五)


    1)url配置里的urlpatterns对象是可以相加的。以此可以区分多个不同前辍。

    from django.conf.urls.defaults import *

    urlpatterns = patterns('myproject.blog.views',

    >> url(r'^$','index'),

    >> url(r'^blog/new/$','new_post'),

    >> url(r'^blog/topics/(?P<topic_name>\w+)/new/$','new_post'),

    )

    urlpatterns += patterns('myproject.guestbook.views',

    >> url(r'^guestbook/$','index'),

    >> url(r'^guestbook/add/$','new_entry'),

    )

    2)为了更好地支持模块化,url配置可以拆分成多个文件,通过include方法聚合真来。注意每个拆分出去的url,其正则还是由^打头的,虽然它并不是真正的网站根目录,但仍然需要以^打头,而不是简单的拼接。

    urlpatterns = patterns('myproject.guestbook.views',

    >> url(r'^guestbook/$','index'),

    >> url(r'guestbook/add/$','new_entry'),

    )

    效果等同于

    urlpatterns = patterns('',

    >> url(r'^guestbook/',include('myproject.guestbook.urls')),

    )

    # guestbook/urls.py

    urlpatterns = patterns('myproject.guestbook.views',

    >> url(r'^$','index'),

    >> url(r'^add/$','new_entry'),

    )

    3)不同于php,用全局数组来访问GET、POST、COOKIE等数据,在django里,http请求和响应都是要经过django中间件进行处理的,序列化得很好的对象数据。在编程的时候非常方便,而经过中间件的处理,又能还原成服务器和客户端能识别的格式。

    4)HttpRequest是封装后的http请求,它是作为参数的形式传递给视图函数的。它有以下常用属性和方法:

    1> GET和POST,接收客户端传递过来的数据,是类似于字典类型的对象(可以当做字典用)。如果不清楚是用GET还是POST方法传过来的,还可以使用REQUEST字典(虽然并不推荐使用它)。

    2> COOKIES和session。 注意session是小写的。

    3> path。URL里域名后的部分。例如/blog/2007/11/04,这个通常也是URLconf要处理的字符串。

    4> method。 "GET"或"POST"两者之一。

    5> encoding。 标明了用来解码表单提交数据所砖雕的编码字符集的字符串。

    6> user。 Django的认证用户,只有当你的站点激活Django的认证机制时才会出现。

    7> FILES。 这是一个字典类对象,包含了所有通过文件输入表单字段上传的文件,其中每一个值又都是另一个字典,里面包含了文件名、内容的类型以及文件的内容。(和php关于file的二维数据异曲同工)

    8> META。 这也是一个字典。它常用的键有

    1. HTTP_REFERER,进站前链接网页,如果有的话。 (请注意,它是REFERRER的笔误。)

    2. HTTP_USER_AGENT,用户浏览器的user-agent字符串,如果有的话。

    3. REMOTE_ADDR 客户端IP,如:"12.345.67.89" 。(如果申请是经过代理服务器的话,那么它可能是以逗号分割的多个IP地址,如:"12.345.67.89,23.456.78.90" 。)

    4. SERVER_NAME。

    5)视图会返回一个HttpResponse对象,这个对象接受一个mimetype参数,默认情况值下为'text/html',如果想返回其它类型的对象,可以设置HttpResponse(mimetype='text/csv')、return HttpResponse(image_data, mimetype="image/png")等。

    6)响应对象里的另一个功能就是设置HTTP头,这时你可以把HttpResponse当作是一个字典来用。

    response = HttpResponse()

    response["Content-Type"] = "text/csv"

    response["Content-Length"] = 256

    7)视图函数里还有一些特殊方法可以简化输出。

    1> render_to_response。 简化渲染模块的过程。

    2> Http404。 抛出404错误。

    3> get_object_or_404和get_list_or_404。 这两个函数就是把两个步骤合二为一:获得一个对象或者列表,如果失败则抛出Http404。

    ###手动抛出404的方法

    from django.shortcuts import render_to_response

    from django.http import Http404

    from myproject.myapp.models import Person

    def person_detail(request,id):

    >> try:

    >>>> person = Person.objects.get(pk=id)

    >> except Person.DoesNotExist:

    >>>> raise Http404

    >> return render_to_response("person/detail.html",{"person":person})

    ==============================================================

    ###利用get_object_or_404,替代前面那个:

    from django.shortcuts import render_to_response, get_object_or_404

    from myproject.myapp.models import Person

    def person_detail(request,id):

    >> person = get_object_or_404(Person,pk=id)

    >> return render_to_response("person/detail.html",{"person":person})

    8)过滤器不仅可以在{{}}里使用,也可以在{% %}里使用。

    {% ifequal object_list|length 10 %}

    9) Form类和Model类很相似,很多时候Form类和Model类是对应的,为了避免代码重复,Form类提供了一个ModelForm子类。ModelForm类和Form类有一个重要的区别,就是它们有一个sava方法。

    from django import newforms as forms

    from myproject.myapp.models import Person

    class PersonForm(forms.ModelForm):

    >> class Meta:

    >>>> model = Person

    ===========================

    from myproject.myapp.forms import PersonForm

    form = PersonForm({'first':'John','middle':'Quincy','last':'Doe'})

    new_person = form.save()

    10) form的编辑。

    # Create a form instance from POST data.
    >>> f = ArticleForm(request.POST) 
    # Save a new Article object from the form's data.
    >>> new_article = f.save() 
    # Create a form to edit an existing Article.
    >>> a = Article.objects.get(pk=1)
    >>> f = ArticleForm(instance=a)
    >>> f.save() 
    # Create a form to edit an existing Article, but use # POST data to populate the form.
    >>> a = Article.objects.get(pk=1)
    >>> f = ArticleForm(request.POST, instance=a)
    >>> f.save()

    11) form的典型调用。

    def contact(request):    
    >> if request.method == 'POST':        
    >>>> form = ContactForm(request.POST)        
    >>>> if form.is_valid():            
    >>>>>> cd = form.cleaned_data            
    >>>>>>>> send_mail(                
    >>>>>>>>>> cd['subject'],                
    >>>>>>>>>> cd['message'],
    >>>>>>>>>> cd.get('email', 'noreply@example.com'
    >>>>>>>> ),
    >>>>>>>> ['siteowner@example.com'],
    >>>>>>> )            
    >>>>>>> return HttpResponseRedirect('/contact/thanks/')    
    >>>>>else:        
    >>>>>>> form = ContactForm(initial={'subject': 'I love your site!'})
    >>>>> return render_to_response('contact_form.html', {'form': form})
  • 相关阅读:
    SQL中sum(),avg()等统计结果为null的解决方法
    PowerDesigner教程系列(六)概念数据模型
    只能输入正整数 已经常用的正则表达式
    PowerDesigner教程系列(四)概念数据模型
    linux全局页目录项
    开始吧
    Tomcat最大连接数问题
    CKEDITOR使用与配置
    /proc/cpuinfo 文件分析(查看CPU信息)
    Tomcat SSL配置及Tomcat CA证书安装
  • 原文地址:https://www.cnblogs.com/cly84920/p/4426678.html
Copyright © 2020-2023  润新知