Python中django学习心得


Posted in Python onDecember 06, 2017

以下是作者在学习Python中django框架时的学习笔记,并把测试的代码做了详细分析,最后还附上了学习心得,值得大家学习。

URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。

'''
urlpatterns = [
url(正则表达式, views视图函数,参数,别名),
]
参数说明:
一个正则表达式字符串
一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
可选的要传递给视图函数的默认参数(字典形式)
一个可选的name参数
'''

一、url的反向解析

如上述,url中的正则表达式即为请求的路径,根据路径匹配执行对应的视图函数,如下,当我们请求路径符合正则表达式要求,就会执行对应的login函数:

Python中django学习心得

其中login函数为:

Python中django学习心得

login.html文件为:

Python中django学习心得

根据以上我们所写的代码逻辑,当通过get请求/login/路径时,我们执行符合此请求路径对应的login()函数,函数渲染一个login.htl的登录页面,当用户验证完信息点击提交按钮时,再次以post形式请求/login/对应的login()函数。

但是,在某些情况下,我们需要更改请求路径的正则表达式,即更换一个请求路径,这时候我们就需要对上述的url中的正则表达式和login.html中的提交路径同时进行更改成我们想要的,但是当我们有很多个文件和位置都有请求/login/的时候,我们一个个的手动的更改显然不是很合理。这就需要用到反向解析,也就是url中别名参数的作用,具体实例如下:

Python中django学习心得

Python中django学习心得

以上即称为反向解析,无论url中请求路径的如何更改,只要别名不改,程序中对此函数的请求都可以通过别名反向解析的形式找到。

二、Including other URLconfs

django项目中创建应用的命令为:

python manage.py startapp app01(app01为项目名)

在django项目创建后,会有一个url.py文件,用于映射不同请求路径对应的函数,但是当我们一个django项目中有很多应用的话,各个项目的url的映射关系均放在此文件中显然不妥,不利于代码间的解耦。此时需要在此url文件中设置Including other URLconfs,设置后各应用对应的url映射关系就可以放在应用自己目录下urls.py文件中。如下:

Python中django学习心得

此情况访问应用下路径映射函数的的方式如下例所示:

Python中django学习心得

三、正则字符串参数

1、无名分组

通过在正则字符中使用一对括号,就可以实现分组,并可以获得分组的参数,如下例:

url(r'^articles/(\d{4})/(\d{2})/$', views.articles2),        #articles2(request,组1参数,组2参数)

当请求路径为:http://127.0.0.1:8000/app01/articles/2004/12/,路径符合上述正则表达式字符串,执行articles2(request,2014,12)函数,即要求定义articles2函数时候必须要接收三个参数,映射过程是按照位置进行传参,函数实例如下:

def articles2(request,year,month):
  return HttpResponse(year+"---"+month)

2、有名分组

上面的示例使用简单的、没有命名的正则表达式组(通过圆括号)来捕获URL 中的值并以位置 参数传递给视图。在更高级的用法中,可以使用命名的正则表达式组来捕获URL 中的值并以关键字 参数传递给视图。在Python 正则表达式中,命名正则表达式组的语法是(?P<name>pattern),其中name 是组的名称,pattern 是要匹配的模式。

url(r'^articles/(?P<y>\d{4})/(?P<m>\d{2})/$', views.articles3)   #articles3(request,y=对应参数,m=对应参数)

当请求路径为:http://127.0.0.1:8000/app01/articles/2004/12/,路径符合上述正则表达式字符串,执行articles3(request,y=2014,m=12)函数,即要求定义articles3函数时必须要接收三个参数,且参数必须为y和m,映射过程是按照关键字进行传参,函数实例如下:

def articles3(request,y,m):                    #参数y和m必须与分组名一致,因为是按照关键字传参,位置随意
  return HttpResponse(y+"-----"+m)

四、redirect函数

redirect()函数也称为重定向函数,现在以第一部分中登陆实例为讲述其执行过程:

第一次网页请求:
请求url: http://127.0.0.1:8000/login/        请求类型:GET   无请求数据
login/-------> views.login------>login()
响应到一个login.html页面
第二次按钮提交:
请求url: http://127.0.0.1:8000/login.html/     请求类型:POST  有请求数据 {"user":"alex","pwd":"123"}
login.html/-------> views.login------>login()
响应的return redirect("/index/")到浏览器,通知浏览器再发送请求:"/index/"
请求url: http://127.0.0.1:8000/index/        请求类型:GET   没请求数据
index/ --->url(r'^index/', views.index),---->index()
响应一个index.html

有上述过程分析可知,重定向函数redirect在重定向的过程中实际是接受到两次响应,第一次通过响应告诉浏览器重新发送请求到需要重定向的路径,第二次是浏览器发送重定向路径请求后得到响应结果。

五、模板层

1、模板语法之变量

在 Django 模板中遍历复杂数据结构的关键是句点字符 ,不同数据类型的数据通过据点字符取值的方式如下例所示:

def index(request):
lis=[111,222,333]
dic = {"name": "alex"}
class Person():
def __init__(self,name,age):
self.name=name
self.age=age
def dream(self):
return ("dream.....")
alex=Person(name="alex",age=34)
egon=Person(name="egon",age=9000)
nacha=Person(name="nacha",age=3)
person_list=[alex,egon,nacha]
return render(request,"index.html",{"lis":lis,"dic":dic,"person_list":person_list})

index.html文件:

<body>
<hr>
<p>{{lis.2 }}</p>              //通过索引取,结果:222
<p>{{ dic.name}}</p>             //通过key取,结果:alex
<p>{{ person_list.1.name }}</p>       //通过索引取到对象,通过对象属性取到属性值
<p>{{ person_list.1.age }}</p>
<hr>
{% for person in person_list %}       //通过循环取到对象,根据对象属性取到属性值
<p>{{ person.name }},{{ person.age }}</p>
{% endfor %}
<hr>
{{ person_list.1.dream }}          //可以取到对象的方法,前提是此方法不需要参数,且有返回值,且取值时不需要括号
</body>
Python 相关文章推荐
python获取指定路径下所有指定后缀文件的方法
May 26 Python
CentOS安装pillow报错的解决方法
Jan 27 Python
python snownlp情感分析简易demo(分享)
Jun 04 Python
python用BeautifulSoup库简单爬虫实例分析
Jul 30 Python
windows下 兼容Python2和Python3的解决方法
Dec 05 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
Dec 26 Python
pyhanlp安装介绍和简单应用
Feb 22 Python
Django rstful登陆认证并检查session是否过期代码实例
Aug 13 Python
Python tornado上传文件的功能
Mar 26 Python
Django haystack实现全文搜索代码示例
Nov 28 Python
python3中布局背景颜色代码分析
Dec 01 Python
vue.js刷新当前页面的实例讲解
Dec 29 Python
Python标准库inspect的具体使用方法
Dec 06 #Python
读取本地json文件,解析json(实例讲解)
Dec 06 #Python
Python语言描述最大连续子序列和
Dec 05 #Python
python matplotlib坐标轴设置的方法
Dec 05 #Python
详解K-means算法在Python中的实现
Dec 05 #Python
Python实现字符串匹配算法代码示例
Dec 05 #Python
Django实现简单分页功能的方法详解
Dec 05 #Python
You might like
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
PHP 程序员的调试技术小结
2009/11/15 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
2016/02/03 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
怎么使用javascript深度拷贝一个数组
2019/06/06 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python协程的用法和例子详解
2017/09/09 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
法国太阳镜店:Sunglasses Shop
2016/08/27 全球购物
Intersport西班牙:在线体育商店
2019/11/06 全球购物
Emma Bridgewater官网:英国餐具制造商
2019/11/24 全球购物
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
NFL官方在线商店:NFLShop
2020/07/29 全球购物
电子商务应届生自我鉴定
2014/01/13 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
计算机专业毕业生自荐书
2014/06/02 职场文书
电子商务专业求职信
2014/07/10 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
Nginx配置https原理及实现过程详解
2021/03/31 Servers
pandas:get_dummies()与pd.factorize()的用法及区别说明
2021/05/21 Python
Python jiaba库的使用详解
2021/11/23 Python