15๐
>>> s="aaa?aaa"
>>> import re
>>> re.findall(r'aaa\?aaa', s)
['aaa?aaa']
The reason /aaa?aaa
wonโt match inside your URL is because a ?
begins a new GET query.
So, the matchable part of the URL is only up to the first โaaaโ. The remaining โ?aaaโ is a new query string separated by the โ?โ mark, containing a variable โaaaโ being passed as a GET parameter.
What you can do here is encode the variable before it makes its way into the URL. The encoded form of ?
is %3F
.
You should also not match a GET query such as /?code=authenticationcode
using regex at all. Instead, match your URL up to /
using r'^$'
. Django will pass the variable code
as a GET parameter to the request
object, which you can obtain in your view using request.GET.get('code')
.
2๐
You are not allowed to use ?
in a URL as a variable value. The ?
indicates that there are variables coming in.
Like: http://www.example.com?variable=1&another_variable=2
Replace it or escape it. Hereโs some nice documentation.
- Fabric: How can I unit test my fabfile?
- Is save_m2m() required in the Django forms save() method when commit=False?
- DjangoRestFramework HTTPS Links With Routers and Viewsets
- Reliable way to only get the email text, excluding previous emails
- Django rest framework where to write complex logic in serializer.py or views.py?
1๐
Djangoโs urls.py
does not parse query strings, so there is no way to get this information at the urls.py
file.
Instead, parse it in your view:
def foo(request):
code = request.GET.get('code')
if code:
# do stuff
else:
# No code!
- Gunicorn will not bind to my application
- What's the purpose of Django "deconstruct" model field function?
0๐
โHow to match the โ?โ, is it special?โ
Yes, but you are properly escaping it by using the backslash. I do not see where you have accounted for the leading forward slash, though. That bit just needs to be added in:
r'^/\?code=(?P<code>.*)$'
0๐
supress the regex metacharacters with []
>>> s
'/?code=authenticationcode'
>>> r=re.compile(r'^/[?]code=(.+)')
>>> m=r.match(s)
>>> m.groups()
('authenticationcode',)