Python中如何在Django框架中隐藏URL参数
正在写一个类似 v2 的社区,在首页点击类似下面的标签时重新返回数据
技术 创意 好玩 Apple 酷工作 交易 城市
超链接地址例如是"/?tab=2"
url 配置没有添加 url 参数,然后在视图里通过 get 获取 tab 参数,过滤数据,使用 render 返回渲染模板
现在主页点击这些标签时 url 地址会加上参数信息,请问如何隐藏?
Python中如何在Django框架中隐藏URL参数
一个页面或者 apache 静态?
在Django里隐藏URL参数,通常有两种主流做法,看你的具体需求。
1. 用POST请求传参
这是最直接的方法。把参数放在POST请求的body里,而不是GET请求的URL里。这样参数就不会显示在地址栏。
# views.py
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
import json
@csrf_exempt
def my_view(request):
if request.method == 'POST':
# 从POST的body里取数据,比如JSON
data = json.loads(request.body)
param_value = data.get('secret_param')
# ... 处理逻辑
return HttpResponse(f"Received: {param_value}")
return render(request, 'form.html')
前端用JavaScript发POST请求,或者用表单(记得设置method="post")。
2. 用Session(会话) 把参数存在服务器端的session里,只传一个session key。这是处理需要跨多个请求的参数的经典方式。
# 第一个视图:存参数
def set_param_view(request):
request.session['secret_param'] = 'my_secret_value'
return HttpResponse('Parameter stored in session.')
# 第二个视图:取参数
def get_param_view(request):
param_value = request.session.get('secret_param')
if param_value:
return HttpResponse(f"Got from session: {param_value}")
return HttpResponse('No parameter in session.')
用户访问set_param_view后,参数就存好了,之后在同一个会话里访问get_param_view就能拿到,URL上啥也没有。
总结一下:
- 如果是一次性的参数传递,用POST请求。
- 如果参数需要在用户浏览的多个页面间持续存在,用Session。
一句话建议: 根据参数的使用范围,在POST和Session之间选一个。
改用 post 就可以了。
js 发起 get 请求并将数据渲染到当前页面 没有刷新页面,url 不变
post 请求可以隐藏这些
其实你还可以放在 session 里面,不过每次都要修改 session 很蛋疼
谢谢各位的思路,其实我还想知道本站是怎么做的,就是首页“技术 创意”那个标签栏
就是你这样的实现的呀! V2EX 只是把首页和技术也映射到了同一个视图函数。
/(?P<tab>\d+)/
或者前面加一个 nginx 进行 rewrite
我也是看了 V2EX 首页也改了下我的站,哈哈, url 里加参数我自定义的模板函数,还得替换 class 的 active ,我搞了一下午

