Django url参数传递(与flask对比)

查过不少资料,对各种传参和urls.py的配置都乱得很,于是捋了一下。

views.py

def test_1(request):
    # 通过get请求传递参数
    # 使用"?"的方式,url中带命名参数,且urls.py配置里不带参数。
    # url:http://xx.com/test1/?param1=xx&param2=xx
    param1 = request.GET.get('param1')
    param2 = request.GET.get('param2')
    return HttpResponse("param1:"+param1, "param2:"+param2)

def test_2(request, param1, param2):
    # 不使用get请求,而通过函数传参
    # url不带参数,urls.py配置里要带参数。
    # url:http://xx.com/test2/123/23
    return HttpResponse("param1:"+param1, "param2:"+param2)

urls.py

urlpatterns = [
    # url:http://xx.com/test1/?param1=xx&param2=xx
    url(r'^test1/$', views.test_1),
    # url:http://xx.com/test2/123/23
    url(r'^test2/(\d+)/(\d+)/$', views.test_2),
 ]

总结就是如果是在函数里传了参数,则url也要传,否则不用。

这两者的区别,如果学过flask会更好理解:

1)、 用get请求的方式,在urls.py的url里不用带参数。这种方式代码类似flask的:

@app.route('/test/', methods=['GET'])
def test_1():
    param_1 = flask.request.args.get('param1')
    param_2 = flask.request.args.get('param2')
    return "param1:%s, param2:%s" % (param1,param2)

2)、 在函数里传参的方式,在urls.py的url里需要带参数。这种方式类似flask中的:

@app.route('/test/<param1>/<param2>', methods=['GET'])
def profile(param1,param2):
    return "param1:%s, param2:%s" % (param1,param2)

猜你喜欢

转载自blog.csdn.net/qq_28304687/article/details/80848482