# 管理站點
## 服務器
* 開啟服務器
```text
命令:python manage.py runserver ip:port
```
* 默認端口為8000
* 是純python編寫的輕量級web服務器,僅在開發階段使用
* 服務器成功啟動,提示信息:
* 可以修改默認端口
```text
python mangage.py runserver 8000
```
* 打開瀏覽器,輸入網址:127.0.0.1:8000或者localhost:8000可以打開默認的頁面
* 注意修改文件不需要重啟服務器,如果增刪文件需要重啟服務器
* 通過ctrl+c停止服務器
## 管理操作
* 站點分為"內容發布"和"公共訪問"
* "內容發布"的部分負責添加、修改、刪除內容。django會根據定義的模型類自動生成管理模塊
### 使用django的管理
* 創建管理員用戶
```text
python manage.py createsuperuser,按照提示輸入用戶名、郵箱、密碼
```
* 啟動服務器,通過'localhost:8000/admin"訪問管理員管理界面,輸入用戶名密碼完成登錄
* 進入管理站點,默認可以對groups、users進行管理
### 管理界面本地化
* 編輯settings.py文件,設置編碼與時區
```text
例如設置為中國的時區和編碼
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
```
### 向admin注冊myapp的模型
* 打開myapp/admin.py 文件,注冊模型
```text
from django.contrib import admin
from .models import students,grades
# Register your models here.
admin.site.register(grades)
admin.site.register(students)
```
* 刷新管理頁面

* 可以對students和grades的數據進行增刪查改操作
* 問題:如果在str方法中返回中文,在修改和添加時會包ascii的錯誤
* 解決:在str\(\)方法中,將字符串末尾添加".encode\('utf-8'\)"
#### 列表頁屬性
* list\_display:顯示字段,可點擊列頭進行排序
```text
class studentsAdmin(admin.ModelAdmin):
list_display = ['pk','stu_name']
admin.site.register(students,studentsAdmin)
```

* list\_filter:過濾字段,過濾框會出現在右側
```text
list_filter = ["stu_name"]
```
* search\_fields:搜索字段,搜索框會出現在上側
```text
search_fileds = ["stu_name"]
```
* list\_per\_page:分頁,分頁框會出現在下側
```text
list_per_page = 10
```
#### 添加、修改頁屬性
* fields:屬性的先后順序
```text
fields= ['stu_name','stu_number']
```
* fieldsets:屬性分組
```text
fieldsets = [
('basic', {'fields': ['stu_name']}),
('more', {'fields': ['stu_number']}),
]
```
#### 關聯對象
* 對于students模型類,有兩種方式注冊
* 方式一:
* 與grades模型類相同
* 方式二:
* 關聯注冊
* 按照grades的注冊方式來注冊students
```text
1.
admin.site.register(students)
2.
from django.contrib import admin
from .models import students,grades
# Register your models here.
class studentsInline(admin.StackedInline):
model = students
extra = 2
class gradesAdmin(admin.ModelAdmin):
inlines = [studentsInline]
admin.site.register(grades,gradesAdmin)
```
* 可以將內嵌的方式改為表格
```text
class studentsInline(admin.TabularInline)
```
#### 布爾值的顯示
* 發布性別的顯示不是一個直觀的結果,可以使用方法進行封裝
```text
def gender(sex):
if sex.stu_sex:
return '男'
else:
return '女'
gender.short_description = '性別'
在admin注冊中使用gender代替stu_sex
class studentsAdmin(admin.ModelAdmin):
list_display = ['stu_name','stu_grade',gender,'stu_date']
```