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的三種返回方式做下說明:
- render:當請求login頁面到urls時,urls路由到views的login方法,方法處理後再經html渲染再返回。一般用於html渲染。
- HttpResponse:當請求test頁面時,urls會路由到views的test方法,方法處理後直接返回字串或者經js處理再返回。一般用於字串直接返回或者經過js處理的場景
- 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__方法並返回了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表資料