django中关于视图view的传值,取值,返回值等

视图
视图负责接受Web请求HttpRequest,进行逻辑处理,返回Web响应HttpResponse给请求者。简单来说就是一个中转站,在前端和后端代码中有任何的交互的原理,都会在view.py 中通过不同接口体现。

1. 路由配置

配置应用的路由,一种方法是直接添加在这里:

from django.contrib import admin
from django.urls import path
from blog import views

urlpatterns = [
    path('admin/', admin.site.urls),
    
    path('', views.index, name='index'), # 首页
    
    path('about/', views.about, name='about'),
]

第二种方法是在在应用里新建urls.py文件配置应用路由:

# 第一步,在主urls中包含应用urls的文件
from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^user/', include(('user.urls'), namespace='user')), # 用户模块
]


#第二步,在应用urls中配置路由
from django.conf.urls import url
from apps.user import views

urlpatterns = [
    url(r'^register$', views.register, name='register'),  # 注册
]

匹配步骤在这里插入图片描述

**2. 获取值

方式一:位置参数
直接使用小括号,通过位置参数传递给视图**。

1)为了提取参数,修改上面的正则表达式如下:

url(r'^delete(\d+)/$',views.show_arg),

2)修改视图show_arg如下:

注意:参数的名字是任意的如a1、b8,尽量做到见名知意。

def show_arg(request,id):
    return HttpResponse('show arg %s'%id)

3)刷新浏览器页面,效果如下图:
在这里插入图片描述

4)在地址栏输入如下地址:

http://127.0.0.1:8000/2/?a=10

5)浏览器页面效果如下图
在这里插入图片描述

方式二:关键字参数
在正则表达式部分为组命名。

1)修改正则表达式如下:

其中?P部分表示为这个参数定义的名称为id,可以是其它名称,起名做到见名知意。

url(r'^delete(?P<id1>\d+)/$',views.show_arg),

2)修改视图show_arg如下

注意:视图show_arg此时必须要有一个参数名为id1,否则报错。

def show_arg(request,id1):
    return HttpResponse('show %s'%id1)

3)刷新浏览器页面,效果如下图
在这里插入图片描述

视图中获取get和post方法提交的值:
这是这个前后端交互比较重要的部分,正如文章开头所指,在view视图中通过request的方法向模板(网页)请求信息,POST,GET都为请求的方法。(注意:在view.py中绝大部分函数或接口都需要有request这个参数并且在第一位)

#接收请求参数
def show_reqarg(request):
    if request.method == 'GET':
        a = request.GET.get('a') #获取请求参数a
        b = request.GET.get('b') #获取请求参数b
        c = request.GET.get('c') #获取请求参数c
        return render(request, 'booktest/show_getarg.html', {'a':a, 'b':b, 'c':c})
    else:
        name = request.POST.get('uname') #获取name
        gender = request.POST.get('gender') #获取gender
        hobbys = request.POST.getlist('hobby') #获取hobby
        return render(request, 'booktest/show_postarg.html', {'name':name, 'gender':gender, 'hobbys':hobbys})

调用模板简写函数render

from django.shortcuts import render
...
def index3(request):
    return render(request, 'booktest/index3.html', {'h1': 'hello'})

从view传值到模版渲染(字典形式):
1. 通过render()

def index(request):
    str='%s,%s'%(request.path,request.encoding)
    return render(request, 'booktest/index.html', {'str':str})

如果返回数据想定义为json值,这里有另一个方法推荐:
    return render(request,'booktest/index.html', json.dumps({'str':str}))

2. HttpResponse()

def index2(request):
    str='<h1>hello world</h1>'
    return HttpResponse(str)

3. JsonResponse()

def json2(request):
    return JsonResponse({'h1':'hello','h2':'world'})

在这里插入图片描述

4. local()函数
local()为python内置函数,如果在函数中所需要返回值,这个时候就可以用loacl,同时获得request得到的所有变量,减少很多代码量。

def index(request):
	a = 1
	b = 'ssss'
	c = 'fajs;fhaf'
   render(request,'index.html',local())

注:本文经转载,加上了一些本人的不才见解,如有问题不妨评论。

本文转载于:
https://blog.csdn.net/weixin_46036019/article/details/106010730?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161112340216780265492701%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161112340216780265492701&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-5-106010730.first_rank_v2_pc_rank_v29&utm_term=django%20view%E4%B8%AD%E6%B7%BB%E5%8A%A0%E5%85%B6%E4%BB%96%E5%8F%82%E6%95%B0&spm=1018.2226.3001.4187

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值