DJANGO2--url路由

Posted zengluo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DJANGO2--url路由相关的知识,希望对你有一定的参考价值。

url路由分发之include

项目文件夹下的urls.py文件中的url写法:
    from django.conf.urls import url,include
    from django.contrib import admin
    from app01 import views
    urlpatterns = [
        # url(r‘^admin/‘, admin.site.urls),
        #首页
        url(r^$, views.base),

        url(r^app01/, include(app01.urls)),

        url(r^app02/, include(app02.urls)),

    ]
    
app01下urls.py内容写法
    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    urlpatterns = [
        # url(r‘^admin/‘, admin.site.urls),
        url(r^$, views.app01base),
        url(r^index/, views.index),
    ]
    
app02下urls.py内容写法   
    from django.conf.urls import url
    from django.contrib import admin
    from app02 import views

    urlpatterns = [
        # url(r‘^admin/‘, admin.site.urls),
        url(r^$, views.app02base),
        url(r^home/, views.home),

    ]

 

视图

请求相关的属性方法(request--HttpRequest对象)

def index(request): #http相关请求信息---封装--HttpRequest对象

    if request.method == GET:
        print(request.body)  #获取post请求提交过来的原始数据
        print(request.GET)   #获取GET请求提交的数据
        # print(request.META)  # 请求头相关信息,就是一个大字典
        print(request.path) #/index/ 路径
        print(request.path_info) #/index/ 路径
        print(request.get_full_path())  #/index/?username=dazhuang&password=123
        
        return render(request,index.html)
    else:
        print(request.body)  # b‘username=dazhuang‘
        print(request.POST) #获取POST请求提交的数据
        return HttpResponse(男宾三位,拿好手牌!)

 

响应相关的方法

HttpResponse  --- 回复字符串的时候来使用
render --- 回复一个html页面的时候使用
redirect -- 重定向
    示例:
    def login(request):
        if request.method == GET:
            return render(request,login.html)
        else:
            username = request.POST.get(username)
            password = request.POST.get(password)
            if username == taibai and password == dsb:
                # return render(request,‘home.html‘)
                return  redirect(/home/)  #重定向
            else:
                return HttpResponse(滚犊子,赶紧去充钱!!!)

    #首页
    def home(request):
        return render(request,home.html)

 

FBV和CBV

FBV -- function based view
def home(request):
    print(home!!!)
    return render(request,home.html)

 

CBV  -- class based view

views.py
    from django.views import View
    class LoginView(View):
        # 通过请求方法找到自己写的视图类里面对应的方法
        def get(self,request):

            return render(request,login2.html)
        def post(self,request):
            username = request.POST.get(uname)
            password = request.POST.get(pwd)
            print(username,password)

            return HttpResponse(登录成功!)
            
urls.py
    url(r^login2/, views.LoginView.as_view()),

 

CBV通过不同的请求方法找到对应的试图类中的方法

关键点,反射

   def dispatch(self, request, *args, **kwargs):
        if request.method.lower() in self.http_method_names:
            handler = getattr(self, request.method.lower(),
         self.http_method_not_allowed) #反射

 

CBV的dispatch方法

from django.views import View
class LoginView(View):
    # GET 
    def dispatch(self, request, *args, **kwargs):
        print(请求来啦)
        ret = super().dispatch(request, *args, **kwargs)
        print(到点了,走人了)
        return ret
    def get(self,request):
        print(get方法执行了)
        return render(request,login2.html)
    def post(self,request):
        username = request.POST.get(uname)
        password = request.POST.get(pwd)
        print(username,password)
        return HttpResponse(登录成功!)

 

FBV加装饰器

def n1(f):
    def n2(*args,**kwargs):
        print(请求之前)
        ret = f(*args,**kwargs)
        print(请求之后)
        return ret
    return n2
@n1
def home(request):
    print(home!!!)
    return render(request,home.html)

 

CBV加装饰器

from django.views import View
from django.utils.decorators import method_decorator

def n1(f):
    def n2(*args,**kwargs):
        print(请求之前)
        ret = f(*args,**kwargs)
        print(请求之后)
        return ret
    return n2

# @method_decorator(n1,name=‘get‘) #方式三
class LoginView(View):
    # GET
    # @method_decorator(n1)  #方式2 给所有方法加装饰器
    def dispatch(self, request, *args, **kwargs):
        # print(‘请求来啦‘)
        ret = super().dispatch(request, *args, **kwargs)
        # print(‘到点了,走人了‘)
        return ret

    # @method_decorator(n1)  #方式1
    def get(self,request):
        print(get方法执行了)
        return render(request,login2.html)
    def post(self,request):
        username = request.POST.get(uname)
        password = request.POST.get(pwd)
        print(username,password)
        return HttpResponse(登录成功!)

 

 

 

 

 

以上是关于DJANGO2--url路由的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段11——vue路由的配置

VSCode自定义代码片段11——vue路由的配置

Django2 URL配置

Django 2.0 url() 到 path()

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

导致资产预编译在heroku部署上失败的代码片段