Dango之视图函数
1.request对象
HTTPRequest对象就是咱们的视图函数的参数request
def home(request):
print(request) #<WSGIRequest: GET '/home/'>
# print(dir(request))
请求相关的常用值
- path_info 返回用户访问url,不包括域名
- method 请求中使用的HTTP方法的字符串表示,全大写表示。
- GET 包含所有HTTP GET参数的类字典对象
- POST 包含所有HTTP POST参数的类字典对象
- body 请求体,byte类型 request.POST的数据就是从body里面提取到的
示例:
#/home/ 纯路径
print(request.path)
#/home/ 纯路径
print(request.path_info)
#/home/?a=1&b=2 全路径(不包含ip地址和端口)
print(request.get_full_path())
#请求头相关数据,是一个字典
print(request.META)
#一个字符串,表示请求使用的HTTP 方法。必须使用大写。
print(request.method)
#一个类似于字典的对象,包含 HTTP GET 的所有参数
print(request.GET)
#一个类似于字典的对象,如果请求中包含表单数据,则将这些数据封装成QueryDict对象。
print(request.POST)
#能够拿到请求数据部分的数据(post,get没有)
print(request.body)
#清除session 一般用于退出登录 注销
request.session.flush
2.HTTPResponse对象
redirect 重定向
from django.shortcuts import render,HttpResponse,redirect
def home(request):
#return HttpResponse("字符串")
#return render(request, 'xx.html') #页面
return redirect('/index/') #路径
在urls中定义好路径(被访问的路径)(要跳转的路径)
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('home/', views.home),
path('index/', views.index),
]
在views中设置跳转
def home(request):
return redirect('/index/') #路径
def index(request):
return render(request, 'index.html') #页面
render可渲染html的变量
def index(request):
v = "我真的好想你"
#模版渲染,这是在回复给浏览器之前做的事
return render(request, 'index.html',{v:v})
<div>可是我还想你啊,小猪</div>
<div>{{ v }}</div>
3.FBV和CBV
视图(视图函数和视图类)
类视图 CBV
views.py
from django.shortcuts import render,HttpResponse,redirect
#先引入类视图模块用于继承
from django.views import View
class LoginView(View):
#处理get请求
def get(self,request):
return render(request,'login.html')
#处理post请求
def post(self,request):
print(request.POST)
return HttpResponse("登陆成功")
urls.py路由写法
path('login/', views.LoginView.as_view()),#根据请求选择方法
html
<form action="" method="post">
用户名: <input type="text" name="username">
密码 : <input type="text" name="pwd">
<input type="submit">
</form>
4.视图加装饰器
views.py
def wrapper(func):
def inner(*args,**kwargs):
print(111)
ret = func(*args,**kwargs)
print(222)
return ret
return inner
@wrapper
def index(request):
print('我还想你')
return HttpResponse("又有何用")
给视图类加装饰器
方法一: 常用
from django.views import View
from django.utils.decorators import method_decorator
class LoginView(View):
#处理get请求
@method_decorator(wrapper)
def get(self,request):
return render(request,'login.html')
#处理post请求
def post(self,request):
print(request.POST)
return HttpResponse("登陆成功")
方式二: 不常用
@method_decorator(wrapper,name="get")
class LoginView(View):
#处理get请求
def get(self,request):
return render(request,'login.html')
#处理post请求
def post(self,request):
print(request.POST)
return HttpResponse("登陆成功")
热爱技术,享受生活,感谢推荐!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?