Django 的路由系统

Django的路由系统

创建app

创建app:
            a. 使用pycharm创建django的时候, 加上app的名字
            b. Python manage.py startapp  app的名字

路由的分组

a. 将业务逻辑写入到app中的views中
                
                urls.py:
                    from app01 import views
                    urlpatterns = [
                        # url(r'^admin/', admin.site.urls),
                          url(r'^test/', views.test),
                    ]
                
b.  使用include来进行app分组;
                urls.py:
                    from django.conf.urls import url, include
                    urlpatterns = [
                        url(r'^classes/', include("classes.urls")),
                        url(r'^staudent/', include("staudent.urls")),
                        url(r'^teachers/', include("teachers.urls")),
                    ]
                
                在其他剩余的app中, 添加urls.py文件, 以classes为例:
                    from django.conf.urls import url
                    from classes import views
                    urlpatterns = [
                        url(r'^get_classes/', views.get_classes)
                    ]
                
                在这个app的views中, 添加业务逻辑处理函数, 以classes为例:
                    from django.shortcuts import render,HttpResponse
                    # Create your views here.
                    def get_classes(request):
                        return HttpResponse('classes list')

路由的分法

- 正则表达式匹配
        
            urlrouters:
                url(r'^test/(\w+)/(\w+)/', views.test),
                url(r'^test1/(?P<id>\w+)/(?P<name>\w+)/', views.test1),
            
            views.py:
                def test(request, name, id):
                    print(id, name)
                    return HttpResponse('test')

                def test1(request, name, id):
                    print(id, name)
                    return HttpResponse('test')
            
            注意:
                如果没有?P的约束, 传参的时候, 会根据顺序来获取参数对应的值
                而如果有约束的话, 传参的时候, 会固定的将获取的值传给所对应的的约束
            
            自定制404notfound的页面:
                url(r'^', views.notfound),
                
                views:
                    def notfound(request);
                        return render(request, "404.html")
        
        - 反向路由解析:
            
            urls.py:
                url(r'^logindbsjhalbdhaskbhdkjsabhdkbashkdbhsabdhsja/$', views.login, name='xxx'),
            
            login.html:
                <form action="{% url "xxx" %}" method="post">
                    <input type="text">
                </form>
        
        
        - FBV (function based views)
            使用函数来处理业务逻辑
        
        - CBV (class based views)
            使用类来处理业务逻辑
            
            urls.py:
                url(r'^login/', views.Login.as_view()),
                
            views.py:
                from django.views import View
                class Login(View):

                    def get(self, request):

                        return render(request, "login.html")

                    def post(self, request):
                        pass
                        
                当请求过来的时候, 会优先判断你的请求方法是GET还是POST, 如果是GET请求的话, 走GET函数, 反之, 走POSt函数
            
                    Http的请求方法:

                    'get',:获取信息的
                    'post':提交数据用post方式
                    'put', :更新数据 
                    'patch', :部分更新

                    'delete':删除

                    form表单的方式, 只支持GET/POST
                    ajax的方式, 全部支持
                    type: "POST" 、get、delete

猜你喜欢

转载自www.cnblogs.com/bladecheng/p/11349413.html
今日推荐