三、视图函数

from django.shortcuts import render

def func(request):

return render(request, ‘XXX.html‘, [kwargs])
return redirect(‘XXX.html‘)
return HttpResponse(‘str‘)

http请求中产生两个核心对象:
HttpRequest对象(http请求)
HttpResponse对象(http响应)
视图函数中第一个参数request就是HttpRequest

1 视图函数返回方法 render() 和 redirect()
render(request, template_name, context=None)
request:浏览器发送过来的请求对象HttpRequest,包含用户信息、请求内容和请求方式等
template_name:templates目录下的html文件名,返回给浏览器的文件
context:对返回的html文件内特殊变量({{ obj }}视图函数和html文件中都存在obj变量)进行赋值处理,以字典形式表示,
locals()表示将函数内所有赋值变量(视图函数和html文件中都存在的变量)传给html文件
redirect(‘/XXX.html‘)
用于实现请求重定向

2 request对象
属性:
method: 请求中使用的HTTP方法的字符串表示。全大写表示。
GET: 包含所有HTTP GET参数的类字典对象
POST: 包含所有HTTP POST参数的类字典对象
服务器收到空的POST请求的情况也是可能发生的,也就是说,表单form通过
HTTP POST方法提交请求,但是表单中可能没有数据,因此不能使用
if req.POST来判断是否使用了HTTP POST 方法;应该使用 if req.method=="POST"
FILES: 包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中
name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:
filename: 上传文件名,用字符串表示
content_type: 上传文件的Content Type
content: 上传文件的原始内容
user: 是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前
没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你
可以通过user的is_authenticated()方法来辨别用户是否登陆:
if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware
时该属性才可用
COOKIES: 包含所有cookies的标准Python字典对象;keys和values都是字符串。
session: 唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。
path: 请求页面的全路径,不包括域名

方法
get_full_path(),
比如:http://127.0.0.1:8000/index33/?name=123 ,
req.get_full_path() 得到的结果就是/index33/?name=123
req.path:/index33
注意:
POST = {...,‘a‘: [1, 2, 3]}
request.POST.get(‘a‘) –>3 只能获取数组中的最后一个
request.POST.getlist(‘a‘) –>[1,2,3]可以获取到数组

3 通用视图
TemplateView
直接返回html文件,不操作数据库
ListView
操作数据库,并将数据传给html文件,通常获取某个表的全部数据
DetailView
操作数据库,并将数据传给html文件,通常获取某个表的单条数据

# urls.py
from django.urls import path
from . import views

urlpatterns = [
path(‘my_view/‘, views.my_view),
path(‘temp_view‘, views.MyTemplateList.as_view()),
path(‘list_view/<int:id>‘, views.MyListView.as_view(), {‘name‘: ‘dsy‘}),
]
#views.py
from django.views.generic import TemplateView, ListView
from ADMIN import models
from django.shortcuts import render

class MyTemplateList(TemplateView):
# 指定返回的html文件
template_name = ‘temp_view.html‘

def get_context_data(self, **kwargs):
context = super(MyTemplateList, self).get_context_data(**kwargs)
# 操作数据库并将变量传给模板
context[‘list1‘] = models.Student.objects.all()
return context

class MyListView(ListView):
# 设定html文件
template_name = ‘list_view.html‘
# 设置html文件变量名称
context_object_name = ‘stu_obj‘
# 操作数据库, 默认取出该表所有数据。想要过滤自定义只能在get_queryset()中
queryset = models.Student.objects.all()

def get_queryset(self):
# 获取URL的参数字典
print(self.kwargs)
# 获取URL的变量id
print(self.kwargs[‘id‘])
# 获取URL的参数name
print(self.kwargs[‘name‘])
# 获取请求方式
print(self.request.method)
stu_obj = models.Student.objects.all()[:3]
return stu_obj

def get_context_data(self, *, object_list=None, **kwargs):
context = super(MyListView, self).get_context_data(**kwargs)
# 操作数据库并将变量传给模板
context[‘grade_name‘] = models.Grade.objects.values(‘name‘).distinct()
return context

def my_view(request):
L = models.Student.objects.all().values_list(‘name‘, ‘stu_id‘)
return render(request, ‘my_view.html‘, locals())

原文地址:https://www.cnblogs.com/dongshiyi/p/10090946.html

时间: 2024-11-15 03:20:04

三、视图函数的相关文章

第三百零五节,Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性

Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性 Views(视图函数)逻辑处理,最终是围绕着两个对象实现的 http请求中产生两个核心对象: http请求:HttpRequest对象 http响应:HttpResponse对象 所在位置:django.http 之前我们用到的参数request就是HttpRequest     HttpRequest对象 逻辑处理函数的第一个形式参数,接收到的就是HttpRequest对象,这个对象里封装着用户的各种请求信息,通过

Django基础三之视图函数

Django基础三之视图函数 本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. 无论视图本身包含什么逻辑,都要返回响应.代码写在哪里也无所谓,只要它在你当前项

03.Django基础三之视图函数

一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. 无论视图本身包含什么逻辑,都要返回响应.代码写在哪里也无所谓,只要它在你当前项目目录下面.除此之外没有更多的要求了--可以说"没有什么神奇的地方".为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为view

django RESTful研究一第一个测试例子(用序列化器编写原生的Django视图函数)

让我们看看通过 Serializer 类怎样来编写 API 的视图函数,现在我们不会使用 REST 框架中的特性,仅仅写原生的Django视图函数. 一.我们创建一个 HttpResponse 的子类,用来将任何数据转换成 JSON格式. 编辑snippets/views.py,如下: from django.http import HttpResponse from django.views.decorators.csrf import csrf_exempt from rest_framew

Flask04 后台获取请求数据、视图函数返回类型、前台接受响应数据

1 后台获取请求数据 1.1 提出问题 前台发送请求的方式有哪些 后台如何获取这些请求的参数 1.2 前台发送请求的方式 GET.POST.AJAX 点睛:如果不指定请求方式,浏览器默认使用GET请求 点睛:进入登录页面的请求和提交登录信息的请求使用的路径都是一样的,只不过前往登录页面的请求是GET请求,服务器返回的是一个静态的页面:当录入登录信息点击确定后就会向后台发送一个POST请求,后台经过逻辑处理后,如果登录信息正确就会返回一个静态主页面(注意:虽然这两个请求都是使用的一样的路径,但是我

python--django之视图函数

1.视图函数中的两个对象 1.1.request(请求对象): request.GET {} get请求数据 request.POST {} post请求数据 request.POST.getlist() request.method 请求方式 request.path 请求路径 request.get_full_path() 请求全路径 1.2.response(响应对象): Httpresponse() 1.2.1.render(request,template_name,context)

54.django视图层(views)的视图函数

1.视图层概念 视图函数,其实就是一个简单的函数,它接收web请求并返回web响应(响应的可以是一个html,一个重定向,一个xml文档等等) 每个视图函数都负责返回一个HttpResponse对象. 1.1 HttpRequest对象属性 django将请求报文中的请求行.首部信息.内容主体封装成 HttpRequest 类中的属性 ''' path: 请求页面的全路径,不包括域名 method: 请求中使用的HTTP方法的字符串表示.全大写表示.例如 if req.method=="GET&

Django的视图函数中一些没有用过的小点

1.request对象 print("返回用户访问的url,但是不包括域名",request.path_info) print("返回请求的方法,全大写",request.method) print("返回HTTPde GET参数的类的字典对象",request.GET) print("返回HTTPde POST参数的类的字典对象", request.POST) print("请求体",request.bo

views 视图函数

视图 1. CBV和FBV FBV (function based view) CBV (class based view ) CBV写法: from django.views import View class AddPublisher(View): def get(self, request): print('这个是get') return render(request, 'add_publisher.html') def post(self, request): print('这个是pos