学习django框架的体会和收获

本文详细介绍了Django框架的核心组件,包括URLConf、视图、模板系统、表单、用户权限系统及Model模型。通过实例解析了Django的URL配置、视图函数的工作原理,以及模板的继承机制。此外,还讨论了表单处理、用户注册与权限管理,以及Model模型系统如何与数据库交互。最后,提到了Django的站点管理Admin模块,它是如何自动发现并注册应用的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简述

最近一段时间在使用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. 用户:在网站注册的人。

2. 权限:用于标识用户是否可以执行某种操作的二进制(yes)标志。

3. 组:一种可以将标记和权限应用于多个用户的常用方法。

4. Messages:向用户显示队列式的系统消息的常用方法。


Model模型系统

模型是关于数据的唯一的、权威的信息来源。它包含了必要的字段,以及数据具有的行为。Django遵循 DRY(Don't Repeat Yourself) 原则,其目标是仅在一个地方定义数据模型,然后自动在其他地方引用这个模型,并派生出其他的东西。

数据存取层,该层处理与数据相关的所有事务:如何存取、如何确认有效性、包含哪些行为以及数据之间的关系等。模型系统可以通过python manage.py syncdb命令直接在数据库中生成相应的数据表。

model模型中的models.py文件主要包含实体类的主要属性,而views.py则主要包括实体类的主要视图函数,大部分都是和数据库有关的操作函数。每个数据模型都是django.db.models.Model的子类,它们的父类Model包含了所有必要的和数据库交互的方法。

Django的应用都是“可插拔”的:你可以在多个项目中使用一个应用;你也可以发布应用给别人用,因为应用并不受限于特定的Django环境。

更改数据库模型

syncdb命令仅仅创建数据库中没有的表,它并不对你数据模型的修改进行同步。如果新增、修改或者删除数据模型中的字段,需要手动完成相应的修改。首先,在数据库中将相应的操作完成,如新增字段,修改字段或者删除字段;其次,在model文件下找到相应的model.py文件,完成对模型的修改;并且运行manage.py sqlall测试模型新的create table语句。如果需要进行验证修改是否正确,在manage.py shell中导入模型和选中表单。


站点管理Admin

对于网站来说,管理界面是基础设施中非常重要的一部分。他可以帮助我们管理用户的信息和网站的主要内容。Django自动管理工具通过django.contrib功能包进行实现。其中django.contrib.admin是最基本的部分。django.contrib.auto是用户鉴别系统,django.contrib.sessions是支持匿名会话的模块,django.contrib.comments是用户评注系统。

Djang管理站点是完全可以进行选择的。当服务启动后,django从url.py引导URLConf,然后执行‘admin.autodiscover()’语句。这个函数遍历INSTALLED_APPS配置,寻找相关的admin.py。如果在指定的app目录下找到admin.py,它就执行其中的代码。调用admin.py中的admin.site.register()方法会将相应的模块注册到管理工具中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值