• 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
  • 相关阅读:
    关于++i和i++的左值、右值问题
    运算符优先级
    计算机中的数及其编码
    递归函数
    PHP读取excel(4)
    替换元素节点replaceChild()
    子结点childNodes
    插入节点insertBefore()
    创建节点createElement
    插入节点appendChild()
  • 原文地址:https://www.cnblogs.com/lwsup/p/7482564.html
Copyright © 2020-2023  润新知