2013-06-13 11 views
0

我试着写在我的urls.py的JSON查询网址正则表达式,将采取一个url像这样的:Django的URL的正则表达式的“地址”

http://localhost:8000/structures/hydrants/3/json?address=100+Washington+Road,+Sacramento,+CA 

并引导到一个视图作为这样的:

def hydrant_json(request, hydrant_address): 
    hydrant = Hydrant.objects.filter(address = hydrant_address) 
    data = [hydrant.json()] 
    return HttpResponse(json.dumps(data), content_type='application/json') 

地址被定义为这样:

class Address(models.Model): 
    class Meta: 
     verbose_name_plural = "addresses" 
    street_num = models.IntegerField(default=0) 
    street = models.CharField(max_length=200) 
    city = models.CharField(max_length=200) 
    state = models.CharField(max_length=200) 
    def json(self): 
     fields = ('street_num', 'street', 'city', 'state') 
     return { 
      'street_num': str(self.street_num), 
      'street': str(self.street), 
      'city': str(self.city), 
      'state': str(self.state) 
     } 
    def __unicode__(self): 
     return str(self.street_num) + ' ' + self.street + ', ' + self.city + ', ' + self.state 

和hydrant.json()的工作,一切都在观看侧饰面。我只想让正则表达式采用上述格式的确切地址,并将其放入查询网址中。

谢谢!

+0

结束试试这个正则表达式'[\ W \ +,] +'这个表达式将仅允许额外的'_'也。严格要求'[a-zA-Z0-9,\ +] +' –

+0

ObXKCD:http://xkcd.com/208/ –

回答

0
r'(?<address>^\d{1,5}\s[a-zA-z\s]+,\s[a-zA-z]+,\s[A-Z]{,2}$)' 

这是一样严格,因为它得到。

基本上它是:

  • 确保它以数字开头

  • 确保的数量为最多5个位数(不知道谁渴望这个可以去,调整{1,5}如果需要

  • 确保逗号,空间和街道名称如下

  • 确保逗号,空间d城市名称如下

  • 确保逗号,状态如下,并与国家