djiango----正则组提取URL路径

1 正则说明

python re模块:

\A:表示从字符串的开始处匹配
\Z:表示从字符串的结束处匹配,如果存在换行,只匹配到换行前的结束字符串。
\b:匹配一个单词边界,也就是指单词和空格间的位置。例如, 'py\b' 可以匹配"python" 中的 'py',但不能匹配 "openpyxl" 中的 'py'。
\B:匹配非单词边界。 'py\b' 可以匹配"openpyxl" 中的 'py',但不能匹配"python" 中的 'py'。
\d:匹配任意数字,等价于 [0-9]。  digit
\D:匹配任意非数字字符,等价于 [^\d]not digit ^[]外面表示开头,在[]里面表示非
\s:匹配任意空白字符,等价于 [\t\n\r\f]。 space
\S:匹配任意非空白字符,等价于 [^\s]。
\w:匹配任意字母数字及下划线,等价于[a-zA-Z0-9_]。
\W:匹配任意非字母数字及下划线,等价于[^\w]
\\:匹配原义的反斜杠\。

‘.’用于匹配除换行符(\n)之外的所有字符。
‘^’用于匹配字符串的开始,即行首。
‘$’用于匹配字符串的末尾(末尾如果有换行符\n,就匹配\n前面的那个字符),即行尾。

定义正则验证次数:
    ‘*’ 用于将前面的模式匹配0次或多次(贪婪模式,即尽可能多的匹配) >=0+’ 用于将前面的模式匹配1次或多次(贪婪模式) >=1
    ‘?’ 用于将前面的模式匹配0次或1次(贪婪模式) 01
    '{m}' 用于验证将前面的模式匹配m次
    '{m,}' 用于验证将前面的模式匹配m次或者多次  >=m
    '{m,n}' 用于验证将前面的模式匹配大于等于m次并且小于等于n次

    ‘*?,+?,??’即上面三种特殊字符的非贪婪模式(尽可能少的匹配)。
    ‘{m,n}’用于将前面的模式匹配m次到n次(贪婪模式),即最小匹配m次,最大匹配n次。
    ‘{m,n}?’即上面‘{m,n}’的非贪婪版本。

2 URL路径参数

未命名参数按定义顺序传递, 如
url(r'^weather/([a-z]+)/(\d{4})/$', views.weather),

def weather(request, city, year):
    print('city=%s' % city)
    print('year=%s' % year)
    return HttpResponse('OK')


命名参数按名字传递,注意P为大写
url(r'^weather/(?P<city>[a-z]+)/(?P<year>\d{4})/$', views.weather),

def weather(request, year, city):
    print('city=%s' % city)
    print('year=%s' % year)
    return HttpResponse('OK')

3 Django中的QueryDict对象

# 假设请求网址路由127.0.0.1:8000/get_query_params/?a=10&b=20&a=30
def get_query_params(request):
    query_dict = request.GET	
    a_dict = query_dict.get("a")
    a_list = query_dict.getlist("a")
    print(a_dict)   # 30
    print(a_list)   # ['10', '30']
    return HttpResponse("get_query_params")

urlpatterns = [
    url(r'^weather/(?P<city>[a-z]+)/(?P<year>\d{4})/$', views.weather),
    # url(r'^weather/(?P<city>[a-z]+)/(?P<year>\d{4})/$', views.weather),
    url(r"^get_query_params/$", views.get_query_params),
]


非表单类型 一般为json类型
import json

def get_body_json(request):
    json_str = request.body
    json_str = json_str.decode()  # python3.6 无需执行此步
    req_data = json.loads(json_str)
    # req_data = json.loads(request.body.decode())	三行遍一行代码
    print(req_data['a'])
    print(req_data['b'])
    return HttpResponse('OK')

重要:查询字符串不区分请求方式,即假使客户端进行POST方式的请求,依然可以通过request.GET获取请求中的查询字符串数据。

4 请求头

可以通过request.META属性获取请求头headers中的数据,request.META为字典类型。

常见的请求头如:
CONTENT_LENGTH – The length of the request body (as a string).
CONTENT_TYPE – The MIME type of the request body.
HTTP_ACCEPT – Acceptable content types for the response.
HTTP_ACCEPT_ENCODING – Acceptable encodings for the response.
HTTP_ACCEPT_LANGUAGE – Acceptable languages for the response.
HTTP_HOST – The HTTP Host header sent by the client.
HTTP_REFERER – The referring page, if any.
HTTP_USER_AGENT – The client’s user-agent string.
QUERY_STRING – The query string, as a single (unparsed) string.
REMOTE_ADDR – The IP address of the client.
REMOTE_HOST – The hostname of the client.
REMOTE_USER – The user authenticated by the Web server, if any.
REQUEST_METHOD – A string such as "GET" or "POST".
SERVER_NAME – The hostname of the server.
SERVER_PORT – The port of the server (as a string).

具体使用如:
def get_headers(request):
    print(request.META['CONTENT_TYPE'])
    return HttpResponse('OK')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值