📜  如何在视图之间传递数据 django - Python (1)

📅  最后修改于: 2023-12-03 15:09:03.856000             🧑  作者: Mango

如何在视图之间传递数据

在Django中,视图之间传递数据是非常常见的一个需求。本文将介绍如何在Django中使用不同的方式来传递数据。

1. url参数传递数据
1.1 GET请求

在url中使用GET请求来传递数据是一种常见的方式。

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

urlpatterns = [
    path('view1/', views.view1),
    path('view2/', views.view2),
]
# views.py文件
from django.shortcuts import render

def view1(request):
    return render(request, 'view1.html')

def view2(request):
    data = request.GET.get('data')
    return render(request, 'view2.html', {'data': data})
<!-- view1.html文件 -->
<a href="{% url 'view2' %}?data=hello">跳转到view2</a>

<!-- view2.html文件 -->
<p>接收到的数据:{{ data }}</p>
1.2 POST请求

使用POST请求来传递数据也是一种常见的方式。

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

urlpatterns = [
    path('view1/', views.view1),
    path('view2/', views.view2),
]
# views.py文件
from django.shortcuts import render

def view1(request):
    return render(request, 'view1.html')

def view2(request):
    if request.method == 'POST':
        data = request.POST.get('data')
        return render(request, 'view2.html', {'data': data})
    return render(request, 'view2.html')
<!-- view1.html文件 -->
<form method="post" action="{% url 'view2' %}">
  {% csrf_token %}
  <input type="text" name="data">
  <button type="submit">提交</button>
</form>

<!-- view2.html文件 -->
<p>接收到的数据:{{ data }}</p>
2. session传递数据

使用session来传递数据是另一种常见的方式。

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

urlpatterns = [
    path('view1/', views.view1),
    path('view2/', views.view2),
]
# views.py文件
from django.shortcuts import render

def view1(request):
    request.session['data'] = 'hello'
    return render(request, 'view1.html')

def view2(request):
    data = request.session.get('data')
    return render(request, 'view2.html', {'data': data})
<!-- view1.html文件 -->
<a href="{% url 'view2' %}">跳转到view2</a>

<!-- view2.html文件 -->
<p>接收到的数据:{{ data }}</p>
3. cookie传递数据

使用cookie来传递数据也是一种常见的方式。

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

urlpatterns = [
    path('view1/', views.view1),
    path('view2/', views.view2),
]
# views.py文件
from django.shortcuts import render
from django.http import HttpResponse

def view1(request):
    response = HttpResponse('设置cookie')
    response.set_cookie('data', 'hello')
    return response

def view2(request):
    data = request.COOKIES.get('data')
    return render(request, 'view2.html', {'data': data})
<!-- view1.html文件 -->
<a href="{% url 'view2' %}">跳转到view2</a>

<!-- view2.html文件 -->
<p>接收到的数据:{{ data }}</p>
总结

Django提供了多种方式来传递数据,根据需求可以选择使用不同的方式。对于简单的数据传递,使用url参数或者POST请求来传递数据即可;对于需要长期保存或者需要跨页面传递的数据,使用session或者cookie来传递数据更为合适。