django之url与视图

1.视图:

视图一般都写在 app的 views.py中。并且视图的第一个参数永远都是request (一个HttpRequest)对象。这个对象存储了请求过来的所有信息,包括携带的参数以及一些头部信息等。

from django.http import HttpResponse

def book(request):
    return HttpResponse("书籍列表!")

def book_detail(request,book_id,category_id): #获取url传递的参数
    text = "您输入的书籍的id是:%s,图书分类:%s" % (book_id,category_id)
    return HttpResponse(text)

def author_detail(request):         #通过字符串查询方式获取参数
    author_id=request.GET.get("id")
    text='你的作者是:%s'% (author_id)
    return HttpResponse(text)

2.URL映射

在用户输入了某个 url,请求到我们的网站的时候,django会从项目的 urls.py文件中寻找对应的视图。在urls.py文件中有一个urlpatterns变量,以后 django 就会从这个变量中读取所有的匹配规则。匹配规则需要使用 django.urls.path 函数进行包裹,这个函数会根据传入的参数返回URLPattern 或者是 URLResolver的对象。

from django.contrib import admin
from django.urls import path
from book import views
urlpatterns = [
    path('admin/', admin.site.urls), #django默认的url映射 

    path('book/', views.book), #URL映射
    path('book/<book_id>/<category_id>/',views.book_detail),#在URL中添加传递参数
    path('book/author/',views.author_detail)#通过查询字符串的方式传递一个参数
    ]

3.URL中包含另外一个urls模块:

在我们的项目中,不可能只有一个 app,如果把所有的 app的views 中的视图都放在urls.py中进行映射,肯定会让代码显得非常乱。因此django给我们提供了一个方法,可以在 app 内部包含自己的 url 匹配规则,而在项目的 urls.py中再统一包含这个app的 urls。使用这个技术需要借助 include函数。

#主urls文件
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
    path('admin/', admin.site.urls),

    path('',include('front.urls')),   #导入到app的urls
    path('cms/',include('cms.urls'))
]
------------------------------------------------------
#front/urls文件
from django.urls import path
from . import views

app_name='front'   #指定应用命名空间

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

aap_name='cms'

urlpatterns=[
    path('',views.index,name='index'),
    path('login/',views.login,name='login')
]

4.url反转:

之前我们都是通过url来访问视图函数。有时候我们知道这个视图函数,但是想反转回他的url。这时候就可以通过 reverse 来实现。

#front/views文件
from django.http import HttpResponse
from django.shortcuts import redirect,reverse

def index(request):
    username = request.GET.get('username')
    if username:                                #获取参数进行判断
        return HttpResponse('前台首页')
    else:
        return redirect(reverse('front:login')) #进行url反转
def login(request):
    return HttpResponse('前台登陆页面')
---------------------------------   
#front/urls文件
rom django.urls import path
from . import views

app_name='front'

urlpatterns=[
    path('',views.index,name='index'),
    path('login/',views.login,name='login')
]

“`

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值