视图函数【views.py】
1:视图函数的第一个参数必须是request,这个参数绝对不能少
2:视图函数的返回值必须是 djang.http.respomnse.HttpResponseBase 的子类的对象
【url.py】传递参数
## url映射
1:为什么回去url.py文件中寻找映射呢?
是因为在 setting.py 文件中配置了 ROOT_URLCONF 为 url.py 。 所以django会去 url.py 中寻找
2:在 url.py 中我们所有的映射,都应该放在 urlpatterns 这个变量中
3:所有的映射不是随便写的,而是使用 path 函数 或者是 re_path 函数进行包装的
## url传参数
1:采用在url中使用变量的方式:在path的第一个参数中,使用‘<参数名>’ 的方式可以传递参数。然后在视图函数中也要写一个参数,视图函数中的参数必须和url中的参数名称保存一致,不然就找不到这个参数,另外,url中可以传递多个参数
2:采用查询字符串的方式: 在url中,不需要单独的匹配查询的字符串的部分。只需要在视图函数中使用request.GET.get('参数名称') 的方式来获取,示例代码
def author_detail(request): author_id = request.GET['id'] text = '作者的id是: %s' % author_id return HttpResponse(text)
因为查询字符串使用的是‘GET’请求,所以我们通过‘request.GET’来获取参数,并且因为‘GET’是一个类似于字典的数据类型,所有获取值跟字典的方式都是一样的。
## url命名
1:为什么需要url命名
因为url是经常变化的,如果在代码中写死可能经常改代码。给url去个名字,以后使用url的时候就使用它的名字进行反转就可以了,就不需要写死url了
2:如果给一个url指定名称?
在 path 函数中,传递一个 name 参数
urlpatterns = [ path(' ', views.index, name = 'index'), path('login/ ', views.login, name = 'login')]
3: 应用命名空间
在多个app之间,有可能产生同名的url。者时候为了避免反转url的时候产生混淆,可以使用应用命名空间,来区分。定义应用命名空间非常简单,只要在 ‘app’ 的 ‘url.py’ 中定义一个叫做 ‘app_name’ 的变量,来指定这个应用的命名空间即可。示例代码如下:
#应用命名空间app_name = 'front'urlpatterns = [ path(' ', views.index, name = 'index'), path('login/ ', views.login, name = 'login')]
以后在做反转的时候就可以使用 '应用命名空间:url名称' 的方式进行反转,示例代码如下
login_url = reverse('front: login')