1. 什么是urls.py
urls.py本质上就是一个标准的python文件,这个python文件的作用就是在URL请求和处理该请求的视图函数之间建立一个对应关系,换句话说,它就是一个url请求映射表。
2. urls.py文件位置
除了在项目根目录下有一个urls.py之外,项目的每个应用下都会有一个urls.py配置文件。
3. urls.py配置格式
- urlpatterns = patterns('视图前缀',
- url(r'^正则表达式1/$', '视图函数1', name="url标识1"),
- url(r'^正则表达式2/$', '视图函数2', name="url标识2"),
- )
patterns函数的第一个参数表示视图前缀,视图前缀可以为空,之后跟上若干个url函数,每个url函数表示一个请求映射关系。
注意:
3.1 url函数的第二个参数,表示视图函数,它的名字不是随便取的,必须要在views.py中真实存在,项目的每个应用下都会有一个views.py文件。
3.2 views.py文件中的视图函数,其第一个参数必须是HttpRequest对象。
3.2 name的作用主要体现在一个视图函数对应多个url请求的场景中,name可以用来唯一标识一个url,所以它必须全局唯一。
4. urls.py如何工作
urls.py本质上就是一个请求映射表,它决定了哪个请求由哪个函数来处理,具体过程如下:
4.1 浏览器发送请求url
4.2 服务端根据请求的url,在项目的所有应用(包括根目录)的urls.py配置文件中进行查找,如果能匹配到该url,就会将该url交给其对应的视图函数进行处理。
4.3 负责处理该url的视图函数,会搜集一些业务数据,然后把这些数据,通过 return render(request, '模板文件', 数据); 渲染到前端页面展示给用户。
###
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login', views.login), ]
###
def login(request): # return HttpResponse('login successful!') if request.method == 'GET': return render(request,'login.html') elif request.method == 'POST': v = request.FILES.get('fafafa') f = open(os.path.join('upload',v.name),'wb') for i in v.chunks(): f.write(i) f.close() return render(request,'login.html')
###
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login', views.Login.as_view()), ]
###
from django.views import View
class Login(View): #调用父亲类的dispatch(),当url的请求到了,调用dispatch(),找到post或者get请求 def dispatch(self,request, *args, **kwargs): result = super(Login,self).dispatch(request, *args, **kwargs) return result # return HttpResponse('OK') def get(self,request): return render(request,'login.html') def post(self,request): return render(request, 'login.html')
请求映射进行分类请求
from django.conf.urls import include from django.conf.urls import url urlpatterns = [ url(r'^cmdb/', include('app01.urls')), url(r'^monitor/',include('app02.urls')), ]
创建app01/urls.py
from app01 import views from django.conf.urls import url urlpatterns = [ url(r'^login/', views.login), url(r'^index/', views.index), url(r'^user_info/', views.user_info), ]
这样就实现了分类请求,请求地址为:
http://127.0.0.1/cmdb/login