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提交方式,全部支持
posted @ 2019-08-13 17:33  Never&say&die  阅读(171)  评论(0编辑  收藏  举报