1. 程式人生 > >python自動化運維學習第十九天--views的返回和admin

python自動化運維學習第十九天--views的返回和admin

views檢視返回

當用戶傳送請求後,urls根據請求路由到views指定方法去處理後會返回,再進行下一步的操作。
views有三種返回方式render、HttpResponse和redirect。
它們分別代表什麼意思呢,先看如下view.py的樣例

from django.shortcuts import render,HttpResponse,redirect
from demo import models
import json

def login(request):
    a = ['biaoti','geshi',0,1]
    if request.method==
'GET': obj_li = models.UserInfo.objects.all() return render(request, 'login.html', locals()) def test(request): dic = {'a':1,'b':2} dic_json = json.dumps(dic) #return HtttpResponse("this is test!") return HttpResponse(dic_json) def redir(request): print("this is redirect."
) return redirect('/login/')

然後是urls.py檔案

from django.conf.urls import url, include
from django.contrib import admin
from demo import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^login/$', views.login),
    url(r'^test/', views.test),
    url(r'^red/', views.redir),
]

結合urls.py和views.py的程式碼對views的三種返回方式做下說明:

  1. render:當請求login頁面到urls時,urls路由到views的login方法,方法處理後再經html渲染再返回。一般用於html渲染。
  2. HttpResponse:當請求test頁面時,urls會路由到views的test方法,方法處理後直接返回字串或者經js處理再返回。一般用於字串直接返回或者經過js處理的場景
  3. redirect:當請求red頁面時,urls會路由到views的redir方法,方法使用redirect函式直接跳轉到了login頁面,如果login存在則相當於去訪問login,否則會返回404。

admin配置

admin是django後臺管理頁面。admin是django強大功能之一,它能共從資料庫中讀取資料,呈現在頁面中,進行管理。預設情況下,它的功能已經非常強大,如果你不需要複雜的功能,它已經夠用,但是有時候,一些特殊的功能還需要定製,比如搜尋功能。
admin預設已經建立了,在urls中就可以看到
url(r'^admin/', admin.site.urls)
進入admin頁面前需要先建立一個超級使用者,在terminal中執行命令,建立超級使用者
python manage.py createsuperuser
回車執行,這時會提示資料超級使用者的username、Email、password,password最少8位,不能只有數字或字母。輸入後,訪問http://127.0.0.1:8000/admin,輸入剛剛建立的使用者名稱和密碼即可進入admin後臺。
在這裡插入圖片描述預設資料很少,只有users和groups。
如果你覺得英文介面不好用,可以在setting.py檔案中修改以下選項
LANGUAGE_CODE = 'en-us' #LANGUAGE_CODE = 'zh-hans'
把建立的資料庫表資料新增到admin後臺頁面,通過admin來檢視修改資料庫資料。需要修改appname下的admin.py檔案。
admin.py檔案內容如下:

from django.contrib import admin
from demo import models      #匯入demo這個app下的models模組(models.py檔案用來建立表)
admin.site.register(models.UserInfo)    #添加了models模組裡的UserInfo類(UserInfo類是建立的表名)

models.py檔案的內容如下:

from django.db import models

class UserInfo(models.Model):
    username = models.CharField(max_length=32,null=True)
    password = models.CharField(max_length=32,null=True)
    def __str__(self):
        return self.username

models.py檔案建立了一個UserInfo類,其實就是在資料庫中建立了一個UserInfo的表。在admin.py檔案中註冊這個UserInfo類,即可在admin後臺管理UserInfo這個表的資料。
注:在models.py建立類時,最後要新增一個__str__函式返回一個類的變數即表的欄位,這樣在admin後臺的表資料中可以檢視到這個欄位名的資料,否則都會顯示相同的UserInfo object。

沒有新增__str__方法返回表的欄位名
沒有新增__str__方法返回表的欄位名
添加了__str__方法並返回了username欄位名
添加了__str__方法並返回了username欄位名
如果想在查看錶資料時顯示多個欄位或者新增查詢、篩選等,可以新增一個類來實現這些功能

 list_display:         指定要顯示的欄位
 search_fields:        指定搜尋的欄位
 list_filter:          指定列表過濾器
 ordering:            指定排序欄位

可以修改admin.py檔案

from django.contrib import admin
from demo import models
# Register your models here.
class MyAdmin(admin.ModelAdmin):       #定義一個類,繼承自admin.ModelAdmin
    list_display = ("username","password")     #列出要顯示的欄位
    search_fields = ("username",)              #可以搜素的欄位名
    list_filter = ("username",)                #可以過濾的欄位名
    ordering = ("username",)                   #可以排序的欄位名

admin.site.register(models.UserInfo,MyAdmin)   #MyAdmin類中定義的功能新增到UserInfo表中

再次檢視UserInfo表資料
在這裡插入圖片描述