要访问我网站上的项目的详细信息页面,可以使用以下网址
<mydomain>/item/1
Run Code Online (Sandbox Code Playgroud)
其中1是Item的主键
我正在寻找一种解决方案,允许我重新设计具有以下要求的网址:
我打算将此问题作为一般网页设计问题,但我想我应该提到我正在使用Python/Django.
你需要有一些样的URL标识,而这个标识:
所以没有那么多选项,对象的主键是最好的选择.如果由于某种原因你不能使用它(为什么不呢?)你可以编码或混淆它:看到这个问题及其答案,以获得有关如何做到这一点的一些想法.
Stack Overflow自己的URL设计值得一看.您可以通过表单的任何网址来解决此问题
https://stackoverflow.com/questions/9897050/any-text-you-like-here!
这允许URL包含问题标题中的关键字(对于搜索引擎),同时还能够在不破坏旧链接的情况下更改标题.
对于 Django,你可以给你的模型一个SlugField,然后让视图使用它查找模型。
MyModel.objects.filter(slug_field_name='some-slug-value')
Run Code Online (Sandbox Code Playgroud)
确保某种形式的唯一性约束在其上。
我不喜欢slugfield选项,因为它向数据库添加了一个额外的查询.
我在一个项目中做了以下事情:
我的网址如下所示:
<domain>/item/5927/728e26e9464a171b228bc9884ba3e4f76e2f8866/
Run Code Online (Sandbox Code Playgroud)
这是:
<domain>/item/<id>/<hash>/
Run Code Online (Sandbox Code Playgroud)
如果您不知道哈希,则无法访问该项目:
urls.py:
url(r'^item/(?P<id>\d+)/(?P<hash>\w+)/$', 'rwapp.views.item', name='item')
Run Code Online (Sandbox Code Playgroud)
views.py:
from hashlib import sha1
def item(request,id=None,hash=None):
if not id:
return HttpResponseRedirect("/home")
if hash:
chash = sha1("secret_word%s"%id).hexdigest()
if not chash==hash:
return HttpResponseRedirect("/home")
else:
return HttpResponseRedirect("/home")
Run Code Online (Sandbox Code Playgroud)
当然,每次渲染URL时都必须添加//部分.
| 归档时间: |
|
| 查看次数: |
7263 次 |
| 最近记录: |