文档章节

七日Python之路--第十二天(Django Web 开发指南)

明天以后
 明天以后
发布于 2014/08/09 21:00
字数 1693
阅读 997
收藏 11

    《Django Web 开发指南》。貌似使用Django1.0版本,基本内容差不多,细读无妨。地址:http://www.jb51.net/books/76079.html 


(一)第一部分 入门

    (1)内置数字工厂函数

        int(12.34)会创建一个新的值为12的整数对象,而float(12)则会返回12.0。

    (2)其他序列操作符

        连接(+),复制(*),以及检查是否是成员(in, not in)

        '**'.join('**')   或  '***%s***%d' % (str, int)

    (3)生成器表达式

        even_number = (x for x in range(1000) if x % 2 == 0)

    (4)元组

        tuple = ('', )  #空元组定义

    (5)enumerate

        能让你同时迭代和计数的函数

 for i, value in enumerate(data):
            print i, value

    (6)匿名函数

        sum = lambda x, y: x+y
        sum(a, b)

    (7)函数装饰器 !!!

        以‘@’开头,对函数进行‘包装’

    (8)*args 和 **kwargs

        *args :元组或列表形式

        **kwargs :字典形式

    (9)实例化

        其他语言一般使用new来创建实例,Python使用的是‘初始化程序’initializer 而不是‘构造函数’constructor

        即'__init__'函数

        Python还支持动态的实例属性。可以‘凭空’创造实例的属性

    (10)正则 !

    (11)关于模块

        Python有导入模块和加载模块之分。模块可以被导入多次,但只会被加载一次。

    (12)可变性。!!!

        可变性是指对象的值能否被改变。Python对象有:类型,标示符,值

        拷贝:copy.copy()  深度拷贝:copy.deepcopy()

    (13)动态网站基础

        通信:http,URL,请求,响应

    (14)不要重复自己(DRY)


(二)深入Django

    (1)定义模型

        模型变量(model field),模型类(model class),模型类元数据(model class metadata)

    (2)为什么使用ORM

        封装有用的方法,可移植性,安全性,表现力

    (3)主键

        使用 AutoField(),或者在某个变量上指定 primary_key = True

    (4)模型间的关系 !!

        ForeignKey,ManyToManyField,OneToOneField

        对于反向访问,可以使用 **_set.all() 进行,也可以指定 related_name = **s 来访问。

        对于多对多关系中。也可以通过 through = '***' 来指向一个显式的中间模型类。在这个类上可以添加额外的变量。

        限制关系 : limit_choices_to = dict()   

(5)模型的继承 !!

        抽象基础类(abstract base class)和多表继承(multi-table inheritance)

        抽象基础类,纯Python继承。添加 class Meta: abstract = True  #这样不会创建数据库表,只是用来为其他实体类提供属性而存在的


    唉,刚吃完晚饭。外面竟下起了瓢泼大雨。呆在出租房里竟有一丝的凉意。

                                                                                  --2014年08月09日21:01:08


        多表继承,和抽象基础类差别不大。只是不再需要 abstract=True 这个 Meta 属性了。

    (6)admin

    (7)使用模型

        Django项目中 manage.py 脚本包含了操作数据库的功能。syncdb只能保证所有模型类都有对应的数据库表,但不会修改已经存在的数据库表。

    (8)查询语法

        查询由模式生成的数据库需要两个类 Manager和QuerySet

    (9)QuerySet  Q 和 ~Q

        使用Q关键字参数封装类进一步参数化。允许你使用更复杂的逻辑。

from django.db.models import Q
        Persons.objects.filter(Q(last='Doe') | (Q(last='Smith') & Q(first='John') & ~Q(middle__startswith='W')))

    (10)用Extra调整SQL !!!

        接受四个关键字 : select , where , tables , params

    (11)利用Django没有提供的SQL特性 !!!!!

        定义模式(schema) 和 定制 initial SQL 

        视图view,触发器trigger,级联cascade

        之前看过一些, 后来使用的不多,基本忘记的差不多了。现在需要好好的研究一下了!

    (12)中间件 !!!

        Django的中间件就是Python的一个类,实现一个特定的接口。

    (13)url配置

        url配置中,关于参数。可以使用 :  (/?P<param>\d{2}/) 来指定 views视图中的参数对应关系。

    (14)手动抛异常

        try:
            person = Person.objects.get(pk=id)
        except Person.DoesNotExist:
            raise Http404

        或者使用 get_object_or_404

    (15)利用 *args / **kwargs

#在视图函数中
def myview(*args, **kwargs):
    #这样我们就可以使用,args[0]或kwargs['object_id'] 而不需要再记住 URLconf中的名称了
##当然在 Django1.6中,完全可以不用在URLconf中使用 ?P<param>

    (16)Django的模板

        模板是一种独立的文本文件,同时还包含了静态的内容和动态标记的逻辑,循环和数据显示等。

        模板系统通常用来生成HTML文件,但还可以生成log文件,E-mail正文,CSV文件等任何文本格式。

        在模板中输出context变量时,会隐式的调用unicode方法。如果试图打印没有__unicode__方法的对象,在模板中是不可见的。

    (17)模板过滤器

        模板过滤器。

    (18) mark- Page 121

                                                                    --2014年08月10日01:31:25   

    (17)模板过滤器

        Django提供了很多来封装Web开发中常见的文本处理工作。

    (18)标签

        {% for %} 中  有 : {{ forloop }} {{ forloop.first }}{{ forloop.last }}{{ forloop.counter }}

    (19)表单

        Django提供了forms库把框架里的三个主要组件联系在一起:模型定义的数据库字段,模板里显示的HTML表单标签,还有检验用户输入和显示错误信息的能力。

        forms.Form 和 forms.ModelForm 之分。

    (20)保存 ModelForm

        有一个save()方法,可以将信息保存为数据库里的一条记录,然后返回Model对象结果。

        save()方法接受一个可选的参数 “ commit ”默认为“ True ”。

new_person = form.save(commit=False)
# new_persion.attr  do somethings
new_person.save()

        关系数据库要求目标记录在引用前就存在!!!

        当有关联对象时,Django会给表单添加一个额外的方法 save_m2m

     (21)区别于Model

         ModelForm的Meta嵌套类允许你定义两个可选属性,fields和exclude。(null=True)

    (22)Form实例初始化

form = PersonForm(initial={'name': '请输入姓名'})

    (23)Form表单验证

        唉 !为了这个验证,折腾了大半夜!!!

# 获取文章详细信息,包含一个CommentForm表单
def detail(req, article_id):
    if req.method == 'POST':
        form = CommentForm(req.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            address = form.cleaned_data['address']
            email = form.cleaned_data['email']
            context = form.cleaned_data['context']
            article = Article.objects.get(pk=article_id)
            comment = Comment(article=article, name=name, address=address, email=email, context=context)
            comment.save()
            return HttpResponseRedirect('dlog/detail.html')
    else:
        form = CommentForm(initial={'name': '请输入姓名'})
    article = get_object_or_404(Article, pk=article_id)
    comments = article.comment_set.order_by('created_time')
    context = {'article': article, 'comments': comments, 'form': form}
    context.update(csrf(req))
    article.comment_count = article.comment_set.all().count()
    article.save()
    return render_to_response('dlog/detail.html', context)

        此页面需要展示Form。当为POST时,绑定Form与request.POST。并验证是否有效。

        当不为‘POST’时,只需将Form清空即可。然后处理本views要显示的东西。

        官方文档例子:

from django.shortcuts import renderfrom django.http import HttpResponseRedirectdef contact(request):
    if request.method == 'POST': # If the form has been submitted...
        # ContactForm was defined in the previous section
        form = ContactForm(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            # Process the data in form.cleaned_data
            # ...
            return HttpResponseRedirect('/thanks/') # Redirect after POST
    else:
        form = ContactForm() # An unbound form

    return render(request, 'contact.html', {
        'form': form,
    })

    (24)Widget

        控制如何显示标签元素的对象。

                


    看文档不仔细啊!唉,害我折腾大半天!!

                                                                        --2014年08月10日04:13:48

© 著作权归作者所有

明天以后

明天以后

粉丝 76
博文 130
码字总数 87367
作品 0
昌平
程序员
私信 提问
七日Python之路--第一天

网上的资源是丰富的。但难免有些过时的信息,比如我现在使用的是去年下载的python3.3,而网上多数都是Python2.7。 差别比较大的就是:①读取用户输入raw_input()已经不能使用,只能使用input...

明天以后
2014/07/21
1K
0
在知乎上学 Python - Web 开发篇 - 知乎

之前,我们先后整理过3期知乎上有关 Python 学习的优质问答和文章索引,以方便大家更好地挖掘及使用知乎上有价值的信息。参见: 在知乎上学 Python - 入门篇 在知乎上学 Python - 爬虫篇 在知...

Crossin的编程教室
01/15
0
0
七日Python之路--第二天

由于之前使用过一段Ubuntu,所以基本命令啥的都还可以。装差利器Vim也是使用过一段时间的。 Ubuntu快速打开终端Alt+Ctrl+T,这样才显得犀利一些嘛。说实话,终端编辑文件啥的,确实比Win下面...

明天以后
2014/07/22
518
0
七日Python之路--第三天

之前由于看基础看的觉着没意思,才去提前看一下Django的。现在突然不知到该干啥了。 不管什么语言,官方文档是必须的。so........... 莫名浮躁,实在看不下去........ 待会研究 re 吧。虽然之...

明天以后
2014/07/23
275
0
七日Python之路--第十天

(一)PyCharm 试用一下,目前VIM只是当做记事本来用,还有好多命令不熟悉,基本就把VIN浪费了。由于之前Java使用Eclipse,这个IDE貌似跟那个差不多,试试吧。官网下载地址:http://www.jetb...

明天以后
2014/07/31
240
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot 系列教程之声明式事务 Transactional

200119-SpringBoot 系列教程之声明式事务 Transactional 当我们希望一组操作,要么都成功,要么都失败时,往往会考虑利用事务来实现这一点;之前介绍的 db 操作,主要在于单表的 CURD,本文将...

小灰灰Blog
15分钟前
75
0
短视频与直播相融合,完善平台功能

直播经历了2016年的大爆之后,热度似乎在今年冷却下来,不可否认的是直播现在的确存在着内容同质化和变现难两大问题,于是在今年,越来越多直播软件中开始加入短视频功能。同时,以短视频快速...

图玩智能科技
25分钟前
61
0
神经元树突臂发现隐藏的计算能力

  大脑的信息处理能力通常被认为存在于数以万亿计的神经元连接中。但过去几十年,越来越多的研究转向了单个神经元, 这些神经元可能承担着比以往认为的更多的计算职责。   最新的证据来自...

水果黄瓜
29分钟前
129
0
nginx事件模块实现细节

在nginx事件模块结构体详解中,我们讲解nginx的事件模块的整体工作流程,并且着重讲解了组织事件模块的各个方法的作用,本文则主要围绕这整个流程,从源码的角度讲解nginx事件模块的实现细节...

爱宝贝丶
31分钟前
201
0
Redis-cluster

Redis集群 集群就是 很多服务器组成的一个网络指的是将多台服务器集中在一起,实现同一业务 集群的特性 可扩展性 动态添加服务器 高可用性 集群提供的从一个出错的服务实体恢复到另一个服务...

快乐搬砖
36分钟前
83
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部