Django #请求映射表

 1. 什么是urls.py
  urls.py本质上就是一个标准的python文件,这个python文件的作用就是在URL请求和处理该请求的视图函数之间建立一个对应关系,换句话说,它就是一个url请求映射表。
 
 2. urls.py文件位置   除了在项目根目录下有一个urls.py之外,项目的每个应用下都会有一个urls.py配置文件。

 3. urls.py配置格式
  1. urlpatterns = patterns('视图前缀',  
  2.     url(r'^正则表达式1/$', '视图函数1', name="url标识1"),  
  3.     url(r'^正则表达式2/$', '视图函数2', name="url标识2"),  
  4. )  

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

 

posted @ 2017-09-05 23:37  陈奕迅-可以了  阅读(209)  评论(0编辑  收藏  举报