美文网首页
Django视图定义,URL映射

Django视图定义,URL映射

作者: 达闻西_ | 来源:发表于2020-03-25 12:44 被阅读0次

    视图

    一般写在app的views.py中,并且视图的第一参数永远都是request(一个HttpRequest对象),这个对象存储了请求过来的所有信息,包括携带的参数,以及一些头部信息。在视图中一般是完成逻辑相关的操作,比如请求添加一篇博客,那么可以通过request来接收这些数据,然后存储到数据库中,最后把执行结果返回给浏览器,返回必须是httpResponseBase对象或者子类的对象

    from django.http import HttpResponse
    
    def book_list(request):
        return HttpResponse("书籍列表")
    
    # urls.py
    path('book/', views.book_list)
    

    视图函数

    • 第一个参数必须是request,不能少
    • 返回值必须是django.http.response.httpResponseBase的子类的对象

    URL映射

    • 为什么会去urls.py中寻找映射呢?
      • 是因为在settings.py中配置了ROOT_URLCONF为urls.py,所以django会去urls.py中寻找
    • 在urls.py中所有映射,都应该在urlpatterns这个变量中
    • 所有映射不是随便写,而是使用path函数或者re_path函数进行包装的
    # URL中添加参数
    from book import views
    
    def index(request):
        return HttpResponse("图书首页")
    
    path('', index) # 首页
    path('book/<book_id>', vies.book_detail) 
    path('book', views.book)
    
    python manage.py startapp book
    
    # views.py
    from django.http import HttpResponse
    
    def book(request):
        return HttpResponse("图书首页")
    
    def book_detail(request, book_id):
        # 可以从数据库中提取book_id这个图书的信息
        text = "您图书的id是 %s" % book_id
        return HttpResponse(text)
    

    URL传参数

    • 采用在url中使用变量的方式,在path的第一个参数中,使用<参数名>的方式可以传递参数,然后在视图函数中也要写一个参数,视图函数中的参数必须和url中的参数名称保持一致,不然就找不到这个参数,另外,url可以传递多个参数。

    • 采用查询字符串的形式,不需要单独匹配查询字符串部分,只要在视图函数中使用request.GET.get方法

    path('book/author/', views.author_detail)
    
    def author_detail(request):
        author_id = request.GET.get('id')
        text = "作者的id是: %s" % author_id
        return HttpResponse(text)
    

    127.0.0.1:8000/book/author/?id=1

    因为查询字符串使用的是GET请求,所以我们通过request.GET来获取参数,并且因为GET是一个类似于字典的数据类型,所以取值和字典的方式一样

    相关文章

      网友评论

          本文标题:Django视图定义,URL映射

          本文链接:https://www.haomeiwen.com/subject/kkmtuhtx.html