<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ![](https://img.kancloud.cn/41/e0/41e066af9a6c25a24868d9667253ec98_1241x333.jpg) ## 視圖 視圖一般都寫在app的views.py中。并且視圖的第一個參數永遠都是request(一個HttpRequest)對象。這個對象存儲了請求過來的所有信息,包括攜帶的參數以及一些頭部信息等。在視圖中,一般是完成邏輯相關的操作。比如這個請求是添加一篇博客,那么可以通過request來接收到這些數據,然后存儲到數據庫中,最后再把執行的結果返回給瀏覽器。視圖函數的返回結果必須是HttpResponseBase對象或者子類的對象。示例代碼如下: news/views.py ``` from django.http import HttpResponse def news(request): return HttpResponse("新聞!") ``` urls.py ``` from news import views urlpatterns = [ path("news",views.news) ] ``` ### URL映射 視圖寫完后,要與URL進行映射,也即用戶在瀏覽器中輸入什么url的時候可以請求到這個視圖函數。在用戶輸入了某個url,請求到我們的網站的時候,django會從項目的urls.py文件中尋找對應的視圖。在urls.py文件中有一個urlpatterns變量,以后django就會從這個變量中讀取所有的匹配規則。匹配規則需要使用django.urls.path函數進行包裹,這個函數會根據傳入的參數返回URLPattern或者是URLResolver的對象。示例代碼如下: ``` from django.contrib import admin from django.urls import path from book import views urlpatterns = [ path('admin/', admin.site.urls), path('book/',views.book_list) ] ``` ### URL中添加參數 有時候,url中包含了一些參數需要動態調整。比如簡書某篇文章的詳情頁的url,是https://www.jianshu.com/p/a5aab9c4978e后面的a5aab9c4978e就是這篇文章的id,那么簡書的文章詳情頁面的url就可以寫成https://www.jianshu.com/p/<id>,其中id就是文章的id。那么如何在django中實現這種需求呢。這時候我們可以在path函數中,使用尖括號的形式來定義一個參數。比如我現在想要獲取一本書籍的詳細信息,那么應該在url中指定這個參數。示例代碼如下: ``` from django.contrib import admin from django.urls import path from book import views urlpatterns = [ path('admin/', admin.site.urls), path('book/',views.book_list), path('book/<book_id>/',views.book_detail) ] ------------------------------------------------------------------ views.py中的代碼如下: def book_detail(request,book_id): text = "您輸入的書籍的id是:%s" % book_id return HttpResponse(text) ``` 也可以通過查詢字符串的方式傳遞一個參數過去。示例代碼如下: ``` urlpatterns = [ path('admin/', admin.site.urls), path('book/',views.book_list), path('book/detail/',views.book_detail) ] ------------------------------------------------------------------ views.py中的代碼如下: def book_detail(request): book_id = request.GET.get("id") text = "您輸入的書籍id是:%s" % book_id return HttpResponse(text) ``` ### URL模塊化 URL中包含另外一個urls模塊: 在我們的項目中,不可能只有一個app,如果把所有的app的views中的視圖都放在urls.py中進行映射,肯定會讓代碼顯得非常亂。因此django給我們提供了一個方法,可以在app內部包含自己的url匹配規則,而在項目的urls.py中再統一包含這個app的urls。使用這個技術需要借助include函數。示例代碼如下: ``` # django_first/urls.py文件: from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), path('book/',include("book.urls")) ] ``` 在urls.py文件中把所有的和book這個app相關的url都移動到app/urls.py中了,django_first/urls.py中,通過include函數包含book.urls,以后在請求book相關的url的時候都需要加一個book的前綴。 ### Django內置轉換器 ``` from django.urls import converters ``` UUID:https://www.cnblogs.com/franknihao/p/7307224.html ### url命名與反轉 - 1.為什么需要URL命名 因為在項目開發的過程中URL地址可能經常變動,如果寫死會經常去修改 - 2.如何給一個URL指定名稱 path("",views.index,name="index") - 3.應用命名空間 在多個app之間可能產生同名的URL,這時候為了避免這種情況,可以使用命名空間來加以區分。在urls.py中添加app_name即可。 ### 應用命名空間和實例命名空間 一個app,可以創建多個實例。可以使用多個URL映射同一個App。在做反轉的時候,如果使用應用命名空間,就會發生混淆,為了避免這個問題,可以使用實例命名空間,實例命名空間使用,namespace='實例命名空間' ``` urls.py from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), path('cms1/', include("cms.urls",namespace='cms1')), path('cms2/', include("cms.urls",namespace='cms2')), path('front/', include("front.urls")), ] ``` ### URL反轉傳遞參數 如果這個url中需要傳遞參數,那么可以通過kwargs來傳遞參數。 ``` reverse("book:detail",kwargs={"book_id":1}) ``` 因為django中的reverse反轉url的時候不區分GET請求和POST請求,因此不能在反轉的時候添加查詢字符串的參數。如果想要添加查詢字符串的參數,只能手動的添加。 ``` login_url = reverse("front:singin") + "?name=jr" return redirect(login_url) ``` ### 指定默認的參數 ``` article/views.py ----------------------------------------------------------------- from django.http import HttpResponse # Create your views here. article_lists = ["a","b","c"] def article(request): return HttpResponse(article_lists[0]) def page(request,page_id=0): return HttpResponse(article_lists[page_id]) ------------------------------------------------------------------- article/urls.py from django.urls import re_path,path from . import views urlpatterns = [ path("",views.article), path("page/",views.page), path("page/<int:page_id>",views.page), ] ``` ### re_path函數 有時候我們在寫url匹配的時候,想要寫使用正則表達式來實現一些復雜的需求,那么這時候我們可以使用re_path來實現。re_path的參數和path參數一模一樣,只不過第一個參數也就是route參數可以為一個正則表達式。 ``` article/urls.py ------------------------------------------------------------------ from django.urls import re_path from . import views urlpatterns = [ re_path(r"^$",views.article), re_path(r"^article_list/(?P<year>\d{4})/",views.article_list) re_path(r"^article_list/(?P<mouth>\d{2})/",views.article_mouth) ] ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看