django处理数据流程是:获取url数据,对app.urls中定义的url进行匹配,匹配成功则转到其后给定的views中的函数进行处理。views处理的时候有时需要从url中获取信息,然后根据这个信息特异性的提取model中的信息。最后决定显示的内容,这里主要叙述提取url的数据和传递的过程以及如何设定属于自己的解析过程
url解析过程
正常情况下有几种默认的解析方式比如
url_patterns=[
path("<int:x>/data",views.show_data,name="show_data")
]
在这个例子中,django将提取整数值/data的模式,并且将x值传递到views.show_data的函数中。
int是从哪里来的呢,就是从django.urls.converters中来的,根据这个我们就可以到这个文件中设计我们自己的converter,就像int一样
设计自己的converter
首先打开converters文件,然后定义一个普通的类比如:
#功能是得到一个六位数
def get_six_num:
#定义正则表达式
regex_six='[0-9]{6}'
#定义一个传递数据的函数,这个函数将会把数据传递给view中的函数,converter都是用to_python来传递数据的
def to_python(self,values):
#传递数据
return int(values)
#这个函数将会决定将得到的python数据转化为字符,成为url中使用的格式(暂时不太理解需要进一步学习)
def to_url(self,values):
return "%04d"%values
然后将自己的converter注册一下,使其可用
#修改DEFAULT_CONVERTERS(还在converters文件中),和init以及其他的converters格式一样,比如
DEFAUL_CONVERTERS={
#这个就是原来整数的那个转化,int就是在url中使用的代表(比如:int:x)
"int":IntConverters(),
#这个是我们自己的converter
"six_number":get_six_num()
}
接下来就可以在url中使用我们自己的converter,但是,使用之前要重启一下server。