Django學習筆記(2)--視圖函數

用pycharm打開FDJ項目python

URL分發器數據庫

視圖:django

視圖通常都寫在app的view,py中。而且視圖的第一個參數永遠都是request(一個HttpRequest)對象。這個對象存儲了請求過來的全部信息,包括攜帶的參數以及一些頭部信息等。在視圖中,通常是完成邏輯相關的操做。好比這個請求使添加一篇博客,那麼能夠經過request來接收到這些數據,而後存儲到數據庫中,最後再把執行的結果返回給瀏覽器。視圖函數的返回結果必須是httpResponse對象或者子類的對象。瀏覽器

實例:app

建立book app:函數

(Django-env) python manage.py startapp book

在book app下的views.py中添加:url

from django.http import HttpResponse def book_list(request): return HttpResponse("書籍列表:")

URL映射:spa

回到FDJ目錄下的urls.py中:code

from book import views urlpatterns = [ path('admin/', admin.site.urls), path('book/', views.book), ]

打開瀏覽器輸入http://127.0.0.1:8000/book/對象

補充:

視圖函數的返回的對象必須爲:

URL添加參數:

有時候,url中包含了一些參數須要動態調整。好比簡書某篇文章的詳情頁的url,是https://www.jianshu.com/p/a5aab9c4978e後面的a5aab9c4978e就是這篇文章的id,那麼簡述的文章詳情頁面的url就能夠寫成https://www.jianshu.com/p/<id>,其中id就是文章的id,那麼如何在django中實現這種需求呢。這時候咱們就能夠在path函數中,使用尖括號的形式來定義一個參數。好比我如今想要獲取一本書籍的詳細信息,那麼應該在url中指定這個參數。示例代碼以下:

在views.py中添加

def book_detil(request,book_id):
    #在數據庫中根據id提取圖書信息
    text = book_id
    return HttpResponse(text)

在urls.py中的urlpatterns中添加

path('book/detil/<book_id>/',views.book_detil),

而後在瀏覽器網址欄輸入http://127.0.0.1:8000/book/1234

固然能夠加更多參數,好比

path('book/detil/<book_id>/<categrary>',views.book_detil),

那麼views.py中的book_detil必須改爲:

def book_detil(request,book_id,categrary):
    #在數據庫中根據id提取圖書信息
    text = book_id
    #categrary....categrart的操做。。。
    return HttpResponse(text)

 

另外一種url傳參數的方式是字符串匹配:

在urls.py中的urlpatterns中添加

path('book/author',views.author_detil),

在views.py中添加

def author_detil(request):
    author_id = request.GET.get('id')
    text= author_id
    return HttpResponse(text)

在瀏覽器網址欄輸入http://127.0.0.1:8000/book/author/?id=111

 

 

 

 

總結:

1.url映射:

  • 爲何會去urls.py文件中尋找映射呢?在'urls.py'中咱們全部的映射,都應該放在‘urlpatterns’這個變量這個變量中。
    • 是由於在'settings.py'文件中配置了‘ROOT_URLCONF’爲'urls.py'。全部django會去'urls.py'中尋找。
  • 全部的映射不是隨便寫的。而是使用'path'的第一個參數中,使用'<參數名>'

 

2.url傳參數:

  • 採用在url中使用變量的方式:在path的第一個參數中,使用'<參數名>'的方式能夠傳遞參數。而後在視圖函數中也要寫一個參數,視圖函數中的參數必須和url中的參數名稱保持一致,否則就找不到這個參數,另外,url中能夠傳毒多個參數。
  • 採用查詢字符串的方式:在url中不須要單獨的匹配查詢字符串的部分。只須要在視圖函數中使用'request.GET.get(參數名稱)'的方式來獲取。由於查詢字符串使用的是'GET'請求,因此咱們經過'request.GET'來獲取參數。而且由於'GET'是一個相似於字典的數據類型,全部獲取取值字典的方式都是同樣的。

 

 

補充:

URL命名與反URL

1.爲何須要url命名?

  • 由於url是常常變換的,若是在代碼中寫死了可能會常常改代碼,給url去個名字,之後使用url的時候就是用他的名字進行反轉就能夠了,就不須要寫死url了。

2.如何給一個url指定名稱?

  • 在'path'函數中,傳遞一個'name'參數就能夠指定。示例:

 

urlpatterns = [
    path('',views.index,name='index'),          
]

 

應用命名空間:

  • 在多個app之間,有可能產生同名的url,這時候爲了不反轉rul的時候傳聲混淆,可使用命名空間,來作區分,定義應用命名空間很是簡單,只須要在'app'的'urls.py'中定義一個叫作'app_name'的變量,來指定這個應用的命名空間便可。示例:
#應用命名空間
app_name = 'front'

urlpatterns = [
path('',views.index,name='index')
]

 

之後在作反轉的時候就可使用'應用命名空間url名稱'的方式進行反轉,示例:

login_url = reverse('front:index')
相關文章
相關標籤/搜索