学习django框架的体会和收获
简述
最近⼀段时间在使⽤python的Django的web框架在写web⽹站。Django作为python的⼀款⽐较流⾏的web框架,以其⾼效性、可扩展性为⼤家所熟悉。Django框架主要由URLConf、View视图⽂件、模板系统、表单模块、Model模型系统和站点管理Admin等⼏⼤部分组成。
搭建Django应⽤的典型流程是:先设计好模型,然后就尽快把admin 运⾏起来,以便你的员⼯、客户可以尽快开始填充数据。之后,你再考虑该如何把数据呈现给⽤户。
URLConf
urls.py是django的核⼼,它是连接url和系统资源之间的纽带。这种纽带不仅包括url和view中的⽅法的映射关系,⽽且包括相应的系统调⽤、css⽂件、图⽚资源等。当⽤户请求某个页⾯时,Django会按顺序遍历每个正则式,直到遇见第⼀个匹配的正则式(如果没有到匹配的,Django就调⽤⼀个特殊的404视图)。正则表达式采⽤C语⾔编译,相对于XML解析,速度快很多,这是Django的优化。
视图
视图函数存在于view.py⽂件中,它是⼀个接受web请求并且返回⼀个web响应的函数。这个响应可以是⼀份⽹页的HTML内容、⼀次重定向、⼀条404错误、⼀份xml⽂档、⼀副图⽚,或者其他任何东西。每个视图都要负责做这两件事情之⼀:返回⼀个包含所请求页⾯内容的HttpResponse 对象,或者抛出⼀个异常,⽐如 Http404。其余部分就由你发挥了。
视图本⾝包含返回该响应所需要的任意逻辑。urls和view视图是松耦合的关系,⽅便进⾏修改,互不影响。视图函数的第⼀个参数的类型是HttpRequest,它返回⼀个HttpResponse实例。
URL与视图⽂件的⼯作原理如下所⽰:⾸先进⼊的web请求转⼊/url中,然后通过在ROOT_URLCONF配置来决定根URLconf,django在URLConf中的所有URL模式中,查第⼀个匹配相应的url的条⽬,如果到匹配,将调⽤相应的视图函数,视频函数将会返回⼀个HttpResponse。Django转换HttpResponse为⼀个合适的HTTP response,以web page显⽰出来。
视图函数中的参数request是HttpRequest对象,并且所有的视图函数都是以request作为它的第⼀个参数;如果URL是类似/time/plus/3那么字符串“3”是offset参数,offset参数是从匹配的URL中提取出来的。提取的字符串总是字符类型,⽽不是整形,即使都是数字形式。
render_to_response() 函数的第⼀个参数是模板名,第⼆个参数是⼀个可选的字典。它的返回值是⽤给定的上下⽂渲染过的模板所组成的HttpResponse 对象。
通⽤视图
通⽤视图可以抽象出⼀些在视图开发中常见的代码和模式,这样就可以在⽆需编写⼤量代码的情况下,快速编写出常见的数据视图。Django内建通⽤视图可以实现如下功能:
1.完成常⽤的简单任务:重定向到另外⼀个页⾯以及渲染⼀个指定的模板;
2.显⽰列表和某个特定对象的详细内容页⾯;
3.允许⽤户在授权活着未经授权的情况下创建、修改和删除对象。
模板系统
视图函数可以调⽤相应的⽹页的模板。我们将HTML写⼊⼀个模板的主要⽬的在于这样我们可以就将python代码编写和HTML设计作为两项不同的⼯作,从⽽将python代码和HTML代码分开编写,提⾼了开发的效率。模板定义了placeholder和表⽰多种逻辑的tags来规定⽂档如何展现。
在典型的⽹站中,很多⽹页的导航条、样式表和⽹站底部的声明等信息都是⼀样的,重新书写会造成⼤量的冗余代码。为了解决这些问
题,django的模板系统提供了继承的功能。⾸先定义⼀个基础模板,然后在⼦模板中继承这个基础模板。基础模板中主要包括⽹页相同的元素,包括导航条、样式表和⽹站尾部等,将⽹页的主体部分⽤{% block %}模板标签进⾏声明;⼦模板使⽤{% extends xxx.html%}的标签重载这些部分。
表单
HttpResponse是我们进⾏表单操作的主要API,HttpResponse对象是view函数的第⼀个参数。其中对象的request.GET和
request.POST属性包括了⽤户提交的信息。他们都是类字典对象,可以通过它们来访问GET和POST数据。当我们提交表单仅仅需要获取数据时就可以使⽤GET,⽽当我们提交表单时候需要更改服务器数据的状态,或者其他不仅仅是获取并显⽰数据的时候就使⽤POST。
由于我们创建了POST表单(它会修改数据),所以就可能有遭遇到跨站攻击的风险。不过值得庆幸的是,Django⾃带了⼀个很⽅便的系统来应对这种危险,所以你不必为此操⼼。其使⽤⽅式简单来说,就是所有向⽹站内部URL做POST请求的表单中,都应该加上 {%
csrf_token %} 这个模板标签。
⽤户、注册和权限
Django⽤户认证系统处理⽤户账号,组,权限以及基于cookie的⽤户会话。这个系统⼀般称为auth/auth(认证与授权)系统。这个系统的名称同时也表明了⽤户常见的两步处理:验证⽤户是否是他所宣传的⽤户;验证⽤户是否拥有执⾏某种操作的授权。
Django的auth系统会包含以下的部分:
1. ⽤户:在⽹站注册的⼈。
django admin 自定义页面2. 权限:⽤于标识⽤户是否可以执⾏某种操作的⼆进制(yes)标志。
3. 组:⼀种可以将标记和权限应⽤于多个⽤户的常⽤⽅法。
4. Messages:向⽤户显⽰队列式的系统消息的常⽤⽅法。
Model模型系统
模型是关于数据的唯⼀的、权威的信息来源。它包含了必要的字段,以及数据具有的⾏为。Django遵循 DRY(Don't Repeat Yourself)原则,其⽬标是仅在⼀个地⽅定义数据模型,然后⾃动在其他地⽅引⽤这个模型,并派⽣出其他的东西。
数据存取层,该层处理与数据相关的所有事务:如何存取、如何确认有效性、包含哪些⾏为以及数据之间的关系等。模型系统可以通过python manage.py syncdb命令直接在数据库中⽣成相应的数据表。
model模型中的models.py⽂件主要包含实体类的主要属性,⽽views.py则主要包括实体类的主要视图函数,⼤部分都是和数据库有关的操作函数。每个数据模型都是dels.Model的⼦类,它们的⽗类Model包含了所有必要的和数据库交互的⽅法。
Django的应⽤都是“可插拔”的:你可以在多个项⽬中使⽤⼀个应⽤;你也可以发布应⽤给别⼈⽤,因为应⽤并不受限于特定的Django环境。
更改数据库模型
syncdb命令仅仅创建数据库中没有的表,它并不对你数据模型的修改进⾏同步。如果新增、修改或者删除数据模型中的字段,需要⼿动完成相应的修改。⾸先,在数据库中将相应的操作完成,如新增字段,修改字段或者删除字段;其次,在model⽂件下到相应的model.py ⽂件,完成对模型的修改;并且运⾏manage.py sqlall测试模型新的create table语句。如果需要进⾏验证修改是否正确,在manage.py shell中导⼊模型和选中表单。
站点管理Admin
对于⽹站来说,管理界⾯是基础设施中⾮常重要的⼀部分。他可以帮助我们管理⽤户的信息和⽹站的主要内容。Django⾃动管理⼯具通过ib功能包进⾏实现。其中ib.admin是最基本的部分。ib.auto是⽤户鉴别系
统,ib.sessions是⽀持匿名会话的模块,ibments是⽤户评注系统。
Djang管理站点是完全可以进⾏选择的。当服务启动后,django从url.py引导URLConf,然后执⾏‘admin.autodiscover()’语句。这个函数遍历INSTALLED_APPS配置,寻相关的admin.py。如果在指定的app⽬录下到admin.py,它就执⾏其中的代码。调⽤admin.py 中的ister()⽅法会将相应的模块注册到管理⼯具中。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论