• Django-路由系统


    1.创建app

    • 使用pycharm创建:File -- > New Project

    app文件解释:

    migrations:模型操作的迁移文件

    admin.py:django后台带了管理的小系统,管理文件

    apps.py:注册的文件

    models.py:写表生成的代码codefirst优先代码生成

    test.py:测试文件

    view.py:视图文件,将业务逻辑写在视图文件中

    • 在命令行输入:python manage.py startapp app的名字 创建app

    2.路由的分组

    ​ 如果将所有的业务逻辑写在一个url.py文件中,操作简单,但业务逻辑会变得越来越复杂,导致代码会越来越多,越来越乱;同时,违反了“高内聚低耦合”的原则。

    • 将业务逻辑写入到app中的views中(不推荐)
    • 使用include来进行app分组
    # 在urls.py文件中
    from django.conf.urls import url,include  # include
    urlpatterns = [
        url(r'^classes/',include('classes.urls'))  # 总部url,将classes这个app下的urls引入进来,将请求发给classes的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
    def get_classes(request):
        return HttpResponse('classes list')
    

    3.路由的分发

    核心是正则匹配表达式匹配

    FBV (function based views):使用函数来处理业务逻辑

    # 127.0.0.1:8000/test/123/nick/: 可以跟参数的分发,后台希望获取123、nick两个参数
    urlrouters: 
    	url(r'^test/(w+)/(w+)/',views.test)  # 根据排列位置传递
    	url(r'^test/(?P<id>w+)/(?P<name>w+)/',views.test1)  # 不受排位的影响,id就是传给id
        
        url(r'^',view.notfound)  # 自定制404notfound的页面
        
        url(r'^loginsdsafdafdsafds/$',views.login,name='m1')  # 反向路由,name可以自定义,会根据name的值反向生成这个loginsdsafdafdsafds/,放到action中。称为方向路由解析
    
        
    def test(request,id,name):
        print(id,name)  # 123传给id,nick传给name
        
    def test(request,name,id):
        print(name,id)  # 123传给name,nick传给id
        
    def test1(request,name,id):
        print(id,name)  # 123传给id,nick传给name
    
        
    # 自定制404notfound的页面
    def notfound(request):
        return render(request,'404.html')  
    
    def login(request):
        return render(request,'login.html')
    
    # login.html
    <form action='{% url 'm1' %}' method='post'>
    	<input type='text'>
    </form>
     
    注意: 
    # 如果没有?P的约束,传参的时候,会根据顺序来获取参数对应的值
    # 如有有约束的话,传参的时候,会固定的将获取的值传给所对应的约束
    

    CBV(class based views):使用类来处理业务逻辑

     urlpatterns = [
        url(r'^login/$',views.Login.as_view()),  # 当请求过来的时候,会优先判断你的请求方法是GET还是POST,如果是GET请求的话走get函数,反之走post函数
     ]
        
     from django.views import View
     class Login(View):
    
        def dispatch(self,request,*args,**kwargs):
            # 在这里可以做预处理操作
            handler = super(Login,self).dispath(request,*args,**kwargs)
            return handler 
            
        def get(self,request):
            return render(request,'login.html')
        
        def post(self,request):
            pass
    # get:获取信息的
    # post:提交数据用post方式
    # put:更新数据
    # patch:部分更新
    # delete:删除
    # form表单的提交方式,只支持GET/POST,ajax提交方式,全部支持
    
  • 相关阅读:
    HDU 1269 迷宫城堡 tarjan算法求强连通分量
    hrbust 1721 A + B = 0 map的应用
    关于vis标记
    poj 1703
    poj1961 kmp
    acm poj1260 dp
    矩阵链乘 hrbust 1600
    单源最短路径 hdu 2066
    最小生成树
    多维背包 hrbudt 1335 算法与追MM
  • 原文地址:https://www.cnblogs.com/863652104kai/p/11347317.html
Copyright © 2020-2023  润新知