Django / Python RegEx - '?id ='做?

时间:2014-06-20 01:50:06

标签: python django django-urls

我正在阅读Django教程,在教程中,urls.py是这样的:

(r'^vote/$', bookmark_vote_page),

并且有一个名为'SharedBookmark'的模型:

class SharedBookmark(models.Model):
    bookmark = models.ForeignKey(Bookmark, unique=True)

但在模板中,导致/ vote /的链接是:

{% if shared_bookmarks %}
     <ul class="bookmarks">
     {% for shared_bookmark in shared_bookmarks %}
         <li>
             <a href="/vote/?id={{ shared_bookmark.id }}" class="vote">[+]</a>

正如你在行中看到的那样:

<a href="/vote/?id={{ shared_bookmark.id }}" class="vote">[+]</a>

该链接不仅仅是去/投票/,它进入/投票/有'?id = x',其中x是数字。

处理链接的视图是:

def bookmark_vote_page(request):
     if request.GET.has_key('id'):
         try:
             id = request.GET['id']

我的问题是,'id = x'到底是做什么的?因为它不会更改URL(当我点击链接时,它仍然会进入/ vote /)。

我试过google'ing但我看到的所有解释都解释了什么?P =但不是什么?id = do。我记得看到一个django文档解释了它,但由于某种原因我找不到文档的链接。

2 个答案:

答案 0 :(得分:4)

Sam解释了如何将URL放在一起。继续那里......

在Django中,查询字符串被转换为类似字典的对象。由于请求是GET请求(将查询参数放入URL而不是请求主体的类型),因此这个类似字典的对象存储在request.GET。所以当视图执行这一行时:

 if request.GET.has_key('id'):

它检查URL是否有一个名为&#34; id&#34;的查询字符串参数。一点都不一旦确定,它就会继续:

 id = request.GET['id']
顺便说一下,建议(主要是为了可读性)来检查查询参数的存在,如下所示:

 if 'id' in request.GET:

答案 1 :(得分:2)

网址中的

?开始query string。查询字符串是以下形式的参数列表:

?name1=value1&name2=value2&name3=value3

这是传递数据以修改GET请求的简便方法。


在大多数HTTP请求中,例如POST / PUT / DELETE /等,您可以将数据与请求一起发送。在GET请求中,您应该只询问某个URL的内容。但有时候,您希望请求一个URL,但会收到稍微修改过的内容。考虑搜索或查询参数:

GET /search?q=example
GET /search?q=example&p=2
GET /search?q=new%20word

我最后的注释更适用于RESTful API的设计。我说你可以在GET请求中使用查询字符串“传递数据”,但是根据你传递的数据类型,这可能是糟糕的设计。通常,查询参数应该执行以下操作:

  • 过滤
  • 排序
  • 修改

这包括用于过滤一组结果的?q=example,用于排序结果的?sort=alphanumeric和用于修改响应类型的?return=json。如果您要将数据发送到修改数据库,则可能不应该使用GET请求。例如,注册应该使用POST请求(因为它正在创建一些东西),修改用户的设置应该使用PUT请求(因为它正在更新某些东西)。