【问题标题】:Django get info in the same web without showing pk in urlDjango 在同一个网络中获取信息而不在 url 中显示 pk
【发布时间】:2017-01-25 05:14:54
【问题描述】:

我正在尝试从模型中获取信息,但不移动 url,让我自己解释一下,例如:

/列表 它显示了信息,如果我只是在那里单击,我可以访问该用户的完整信息,或书籍或其他内容,并且 url 更改为 detail/8/

有什么方法可以在不显示 url 中的数据库 id 的情况下获取信息?

例如列表/

我有一些代码,但我不知道怎么做,希望你们能帮助我。

网址:

url(r'^detalle/(?P<pk>[0-9]+)/$', views.detalle_id, name="detalle_id"),
url(r'^detalle/(?P<nombre>.*)/$', views.detalle_nombre),

观看次数:

def detalle_id(request, pk):
    detalle = Pregunta.objects.get(pk=pk)
    Pregunta.objects.filter(id=pk).update(comentario='1')

    return render(request, 'detalle.html', {'detalle': detalle})


def detalle_nombre(request, nombre):
    detalle = Pregunta.objects.get(nombre=nombre)
    return render(request, 'detalle.html', {'detalle': detalle})

def lista(request):
    listadb = Pregunta.objects.all()
    return render(request, 'lista.html', {'listadb':listadb})

编辑:来自 cmets:

这样做的原因是因为我正在尝试创建一个客户端数据库,并且将使用该数据库的用户将可以访问其中的一些数据库,但不能访问所有数据库,因此如果用户设置为 domain.com /89 将看到 89 号客户的信息或可以编辑,这我有很多理由要这样做。相信我,我需要获取有关点击的信息,但只需点击即可访问而无需更改网址。可能吗 ?你有什么想法吗

【问题讨论】:

  • 你可以用 slugs 代替 ids
  • 谢谢arcegk的回答,问题是我需要一个干净的url,有什么方法可以在不更改url的情况下点击查看书籍信息?
  • 为什么不想使用统一资源标识符?没有电话号码的电话网络有什么用?
  • 这是因为我正在尝试创建一个客户端数据库,并且将使用该数据库的用户将可以访问其中一些但不能访问所有数据库,因此如果用户设置例如 domain.com/89 将看到信息或可以编辑客户端 89 号,这我有很多理由要这样做。相信我,我需要获取有关点击的信息,但只需点击即可访问而无需更改网址。可能吗 ?你有什么想法吗?
  • 你试过我的答案了吗?

标签: python django django-views


【解决方案1】:

如果您尝试为数据库中的每本书或其他项目创建一个“不可猜测”的 URL,以阻止未经授权的访问,那么您就走错了路。无法猜测的 URL 可以并且将会被猜测,不应该看到或编辑它们的人会编辑它们。

至少您应该检查用户是否已通过身份验证。

if request.user.is_authenticated():

但这只会告诉你用户是登录还是匿名用户。要确定用户是否有权编辑,您需要向模型中添加一些信息。

class Pregunta(models.Model):
    ....
    owner = models.ForiegnKey(User)

然后做一个额外的测试,看看所有权是否正确。

回到不可猜测的 URL,如果您不想使用 slug,可以使用非顺序主键:https://stackoverflow.com/a/37605582/267540

如果您不想向用户透露您的数据库中有多少项目以及哪个项目先出现,这将非常有用。

【讨论】:

    猜你喜欢
    • 2020-05-27
    • 2016-10-20
    • 2012-03-04
    • 2016-10-02
    • 2020-04-25
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多