Django后台框架1.2(视图+url传参+startapp+url命名+反转url) - Go语言中文社区

Django后台框架1.2(视图+url传参+startapp+url命名+反转url)


视图函数

视图一般都写在views.py中。并且视图的第一个参数永远都是request ( 一个HttpRequest)对象。

我们在项目中专门来新建一个views.py文件,用这个文件来专门的书写所有的页面返回项,实例如下:

from django.http import HttpResponse
from django.shortcuts import render

def test(request):
    return HttpResponse("菜徐坤")

注意: test的第一个参数必须是request,return必须是HttpResponse。
接着在urls.py中配置一下这个链接就可以了。

from Django import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', views.test),  #刚配置的链接
]

url传参

创建了视图函数之后,接下来就是对于试图函数的传参了,也叫url传参,至于传参的作用呢:就是假如我们访问了一个文章详情页,我们肯定不会问每一篇文章专门写一个视图函数,因为很多,所以可以直接通过传入变量来进行区分。

views.py中的函数书写,注意第一个变量还是request,第二个变量为自己定义的,然后还是到urls中进行配置。

def book_detail(request,book_id):
    text = "您获取的图书ID为 %s " % book_id
    return HttpResponse(text)

urls.py配置。

path('book/<book_id>/',views.book_detail) #注意参数一定要和试图函数中保持									    一致才可以

实例访问链接为:127.0.0.1:8888/book/菜徐坤
在这里插入图片描述

通过request的传参方式
一般地,在浏览器访问地时候,通常都是通过?id=xxx来进行数据的传递和参数地查询,就比如当前我编辑地这个链接,一般的这种方式用的比较多

https://editor.csdn.net/md?articleId=103624380

这个request变量会包含连接中传入的所有的信息,可以直接通过GET请求来获得。

url.py

path('book/author/',views.book_author)        # request传参

views.py

def book_author(request):
    author = '您获取的作者id为 %s ' % request.GET.get('id')
    return HttpResponse(author)

访问实例:
在这里插入图片描述

startapp的应用

新建app应用,cmd窗口来到当前的django项目中,用命令

python manage.py startapp xxx  # xxx为名称

即可创建一个app出来进行使用,然后在主urls中调用django的include即可将app中创建的views包含进来直接进行使用。

url命名与反转url

一个项目中必定包含多个项目,如前端后台,所以通过startapp来创建两个项目分别是前台和后台,然后在创建的页面中分别都有views.py,至于urls.py,如果全部都导入到django的urls中的话必定会产生很多的url这时候命名就可能产生冲突,如访问前台有一个index,而后台也有一个index就产生不便,所以在子app中新建urls直接在子app中进行path的设定,然后在父django中的urls用include来导入就可以了。

我新建了cms和front子app

cms的urls.py如下:

from django.urls import path
from . import views

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

front的urls.py如下:

from django.urls import path
from . import views

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

主django.py的urls.py如下:

from django.urls import path,include

urlpatterns = [
    path('',include('front.urls')),                # include用法
    path('cms/',include('cms.urls'))
]

反转url

重定向页面,重定向到login页面。

from django.shortcuts import redirect,reverse

def index(request):
    username = request.GET.get('id')
    if username:
        return HttpResponse('前台首页')
    else:
        return redirect('/login/')

url命名

但是,上述的重定向的方法会出现一些问题,比如我们的项目中有两个app的子项目,cms和front,如果我需要修改一个重定向的位置,那么就很需要全部去修改一边非常麻烦,所以如果我们对于一个链接,给他命名就很好了,所以在urls中我们可以对一个path的路径进行命名。

下面的代码中将index命名为index,login命名为signin,那么不论前面的路径怎么改,只需要调用名字就可以了。

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

调用方法反转url

反转就是用名字来找到路径,然后拼接上去。

from django.http import HttpResponse
from django.shortcuts import redirect,reverse

def index(request):
    username = request.GET.get('id')
    if username:
        return HttpResponse('前台首页')
    else:
        return redirect(reverse('signin'))

app的命名
上述解决了链接需要时常修改的问题之后,还存在着一个问题就是我们在不同的app中如果命名了同一个名称,那么反转url就会出现一些问题,不知道要找谁的路径,那么我们就给不同的app命名即可。

在urls.py中

# 应用命名
app_name = 'front'
def index(request):
    username = request.GET.get('id')
    if username:
        return HttpResponse('前台首页')
    else:
        return redirect(reverse('front:signin'))

app_name:路径名 可以正确的索引。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_42730789/article/details/103624380
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢