5.7Django网络框架(7):视图语法详解

@什么是视图

  • 视图层=路由表(urls.py)+视图函数(views.py)
  • 其角色相当于MVC中的Controller;
  • 其职能是协调models和Template的关系,并解除其耦合;
  • 过程:
    ○ 路由表接收用户请求,并分配给相应的视图函数进行处理
    ○ 视图函数调用模型获取数据
    ○ 视图函数将数据交给模板渲染
    ○ 视图函数将渲染结果返回给客户端

@路由定义

  • 定义路由表响应函数
# 将指定路由交由指定函数进行处理
# 当前函数被命名为'hehe'(用于后续反向解析)
url(r'^hehe/(\d+)/', views.hehe_user, name='hehe')
  • 将特定路由派发给子路由表
# 将所有/app/xxx派发给App下的urls.py处理
# namespace='app',该子路由表被命名为'app'
url(r'^app/', include('App.urls', namespace='app'))
  • 【反向解析】= 得到【指定路由表】中的【指定函数】对应的【url路由】

@路由参数

  • 普通参数规则
    ○ 在url匹配规则中使用括号
    ○ url规则中有多少括号,响应函数的request参数后就要有多少参数
    ○ 一一对应,按位置对应(位置参数)
    ○ 写法(\正则)
  • 普通参数示例
url(r'^hehe/(\d+)/', views.hehe_user, name='hehe')
def hehe_user(request, user_id):
  • 关键字参数规则
    ○ 关键字参数 (?P\正则 ) ,P代表params
    ○ 需要和视图函数的参数 (year),按照名称匹配
  • 关键字参数示例
url(r'^getdate/(?P<month>\d+)/(?P<day>\d+)/(?P<year>\d+)', views.get_date, name='getdate')
def get_date(request, year, month, day)
  • 反向解析路径

    ○ namespace:路由文件urls.py注册的名字
    ○ name:路由函数注册的名字

# 模板中写法
{% url 'namespace:name'  value1 value2 ...%}
{% url 'namespace:name' key=value key=value ...%}
# 代码中写法
reverse('namespace:name', args=(value1,value2...))
reverse('namespace:name', kwargs={key:value, key: value})

@返回响应

  • 渲染页面并返回
# 以HttpResponse形式返回渲染结果
return HttpResponse(result)

# 直接在响应中给页面内容   
return HttpResponse("<h1>HelloWorld</h1>")

# 直接返回渲染结果
return render(request, 'Hello.html')

# 渲染模板时传递数据
return render(request, 'AnimalList.html', context={"animals": animals, "data": data_dict})
  • 请求重定向
return HttpResponseRedirect("/app/wahaha/123/")
return HttpResponseRedirect(reverse("app:haha",args=(123,)))

return HttpResponseRedirect("/four/getdate/4/1/2018/")
return HttpResponseRedirect(reverse("two:getdate", kwargs={"year":"2019","month":"11", "day":"11"}))
  • 返回JSON数据
return JsonResponse({"msg": "ok", "status": "200", "data": "精神一下"})
  • 用途
    ○ 响应前端AJAX请求
    ○ 为移动端APP返回数据

@Request对象

  • 请求对象
  • 视图函数中的第一个参数
  • 是由Django框架根据用户的请求信息,为开发者自动创建的一个对象
  • 包含了请求的所有信息
  • 例如:请求路径path、请求方法method、请求编码encoding、请求参数GET、请求参数POST、文件参数FILES、会话对象COOKIES、session、是否阿贾克斯is_ajax、元信息META,等
  • 用法举例
# 判断请求方式是否为GET
if request.method == "GET":

# 获得GET请求携带的数据
goodsid = request.GET.get("goodsid")

# 获得POST请求携带的数据
username = request.POST.get("username")

# 获取上传的文件对象
icon = request.FILES.get("icon")

# 设置和获取session键值
request.session["user_id"] = user.id
user_id = request.session.get("user_id")

# 清空session
request.session.flush()

@Response对象

  • 响应对象
  • 由开发者自己创建
  • 服务器和客户端交流的方式
  • 返回内容分类
    ○ 直接返回页面内容:HttpResponse或render
    ○ 重定向:HttpResponseRedirect或redirect
    ○ 返回Json数据:JsonResponse
  • 属性和方法例如:响应内容content,响应编码charset,响应代码status_code,内容类型content-type,向响应中入内容write(),清空响应内容flush(),等

@错误页面定制

  • 关闭DEBUG模式
  • 想要覆盖哪个错误,就书写相应的HTML,例如:
    ○ 404.html
    ○ 502.html
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖的乔布梭

你好我是秦始皇转世,资助请从速

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值