• django创建app、在视图函数及url中使用参数、url命名、通过redirect实现网页路径跳转


    app用来实现一个独立的功能,视图一般都写在app的view.py中,并且视图的第一个参数永远是request,视图的返回值必须是HttpResponseBase对象或子类的对象。

    创建一个app:first_project

    进入项目所在文件夹,python manage.py startapp appname 

    views.py视图函数如下

    from django.http import HttpResponse
    # Create your views here.
    def book(request):
        return HttpResponse('Home page of book')
    def book_detail(request,book_catagory,book_id): #这两个参数的名字要与url.py中的参数名称一致
        text='The book is in %s catagory,and it's id is %s'%(book_catagory,book_id)
        return HttpResponse(text)
    def book_author(request):
        author_name=request.GET.get('name')#通过request.GET.get获取输入的参数
        text = 'The author of the book is %s'%author_name
        return HttpResponse(text)

    对应项目的url.py如下

    from django.http import HttpResponse
    from book import views  #需要引入book项目的视图
    
    def index(request):
        return HttpResponse('首页')
    
    urlpatterns = [
        path('', index),    #定义输入参数为空的返回情况
        path('admin/', admin.site.urls),
        path('book/',views.book),
        path('book_detail/<book_catagory>/<book_id>',views.book_detail),#尖括号表示可以在浏览器中传入的参数,注意此处的参数名称要与视图函数定义的参数名称一致
        path('book_author/',views.book_author)
    ]

    以上,如果调用book_detail,可在浏览器中输入http://127.0.0.1:8000/book_detail/health/3

    以上,如果调用author,可以再浏览器中输入http://127.0.0.1:8000/book_author?name=libai

    创建多个app:url_name_demo

    先创建一个项目:django-admin startproject url_name_demo

    再在这个项目下创建两个app:

    cd url_name_Demo

    python manage.py startapp front

    python manage.py startapp cms

    然后手动在front和cms的app里分别创建urls.py文件

    front和cms的views.py文件分别如下

    #front
    from django.shortcuts import render
    from django.http import HttpResponse
    # Create your views here.
    def index(request):
        return HttpResponse('Home page of front')
    
    def login(request):
        return HttpResponse('Login of front')
    
    
    #cms
    from django.shortcuts import render
    from django.http import HttpResponse
    # Create your views here.
    def index(request):
        return HttpResponse('Home page of cms')
    
    def login(request):
        return HttpResponse('Login of cms')

    front和cms的urls.py文件分别如下

    #front
    from django.urls import path
    from . import views
    urlpatterns=[
        path('',views.index),
        path('login/',views.login)
    ]
    
    #cms
    from django.urls import path
    from . import views
    urlpatterns=[
        path('',views.index),
        path('login/',views.login)
    ]

    整个项目的urls.py文件如下

    from django.contrib import admin
    from django.urls import path,include  #还需导入include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('',include('front.urls')),  #通过include将app的url与app的视图关联起来
        path('cms',include('cms.urls'))
    ]

    运行整个项目:

    在浏览器输入http://127.0.0.1:8000/,显示Home page of front

    在浏览器输入http://127.0.0.1:8000/login,显示Login of front

    在浏览器输入http://127.0.0.1:8000/cms,显示Home page of cms

    在浏览器输入http://127.0.0.1:8000/cms/login,显示Login of cms

    网页跳转:

    模块导入:from django.shortcuts import redirect

    实现跳转:return redirect('/login') 参数为指定要跳转的功能网页,/login会重新从urls文件的路径中去进行匹配。

    通过redirect('/login')实现网页跳转,通过render(request,'*.html')也可以实现同样效果,但是两者有实质性的区别。通过redict实现跳转,会根据redict指定的路径重新去urls文件进行路径匹配并执行相应的函数再返回网页,在浏览器中看到的也是一个新的url地址,而直接通过render进行跳转,只是将指定网页渲染出来,浏览器看到的url地址并不会发生改变。 

    url取名:

    上述例子中的所有url的名称一旦改变,其他所有需要跳转到该url的引用都需要修改,为避免出现这个问题,可以给url取一个名字,后续通过反转这个url这个名字去找到对应的url

    from django.shortcuts import redirect,reverse

    路径写法:path('login/',views.login,name='login')

    实现跳转:return redirect(reverse('login')) 

    即后续login/的url不论如何改变,改变成logging/、signin或者其他,都可以通过reverse('login')找到对应的url

    由于多个app可能存在相同的url,为了避免在反转时对url产生混淆,可以在每个app的urls.py文件中通过app_name指定应用命名空间即可,后续在反转时同时指定命名空间和url

    例如front app的urls.py文件中指定app_name='front'

    路径写法:path('login/',views.login,name='login')

    实现跳转:return redirect(reverse(front:'login')) 

  • 相关阅读:
    CSS外边距的合并
    四大主流浏览器内核
    ViewPort视口
    url、src、href定义以及使用区别
    Debug和Release区别
    基线概念
    浅谈C#循环控制流程语句(web前端基础)
    With you With me
    css元素内容基础
    年轻人有梦想,老人有回忆
  • 原文地址:https://www.cnblogs.com/Forever77/p/10121687.html
Copyright © 2020-2023  润新知