7、サーバーを起動します
事前設定作業が完了したら、サーバーを正式に起動できます。これは、開発とデバッグに限定されたDjangoが提供する軽量サーバーです。ドキュメントに文があります(「私たちはWebフレームワークの専門家ですが、 Webサーバーの専門家ではありません」)。
- コマンドラインでサーバーを起動できます
python manage.py runserver ip:port #(ip和端口可以不写,默认为本机以及8000端口)
8、管理サイト管理
概要:データベースコンテンツのリリース、およびコピー、追加、削除、変更、チェックについて
- まず、管理アプリケーションを構成する必要があります。setting.pyのINSTALLED_APPSにadmin.contrib.adminを追加します。
- 管理者ユーザーを作成します。
python manage.py createsuperuser
コマンドを実行して、ユーザー名、メールアドレス、パスワードを順番に入力します- 管理インターフェースにログインするためのWebサイトは... / admin
- 中国化
- adminのサイト管理ページは純粋な英語です。中国語に切り替える場合は、次の構成を行う必要があります
。setting.pyで変更します。LANGUAGE_CODE = 'zh-Hans' TIME_ZONE='Asia/shanghai'
- 管理テーブル
from django.contrib import admin
# Register your models here.
from .models import Grades, Students # (自行引入)
# 关联创建(当创建班级表时附带要创建两个学生信息)
class StudentsInfo(admin.TabularInline): # 也可以用admin.StackedInline
model = Students
extra = 2
# 注册
class GradesAdmin(admin.ModelAdmin):
inlines = [StudentsInfo] # 关联创建时使用
# 列表页属性
list_display = ['pk', 'gname', 'gdate', 'ggirlnum', 'gboynum', 'isDelete'] # 设置要显示的字段
list_filter = ['gname'] # 设置过滤器
search_fields = ['gname'] # 设置搜索器
list_per_page = 5 # 设置每页显示的条数
# 添加、修改页属性
fields = ['ggirlnum', 'gboynum', 'gname', 'gdate', 'isDelete'] # 修改添加顺序
'''
fieldsets = [ # 给添加的属性进行分组
("num", {"fields": ['ggirlnum', 'gboynum']}),
("base", {"fields": ['gname', 'gdate', 'isDelete']}),
]
'''
# 执行动作位置
actions_on_top = False
actions_on_bottom = True
admin.site.register(Grades, GradesAdmin)
# 用装饰器注册(可以删除最下面的register注册用装饰器)
# @admin.register(Students)
class StudentsAdmin(admin.ModelAdmin):
# 用于对布尔值进行判断,逻辑分析后输出
def gender(self):
if self.sgender:
return "男"
else:
return "女"
# 对于字段名进行重定义
gender.short_description = "性别"
# 列表页属性
list_display = ['pk', 'sname', 'sage', gender, 'scontend', 'sgrade', 'isDelete'] # 设置要显示的字段
list_per_page = 2 # 设置每页显示的条数
# 添加、修改页属性
fields = [] # 修改添加顺序
'''
fieldsets = []
'''
admin.site.register(Students, StudentsAdmin)
まず、管理対象のテーブルをインポートしてから、レジストリを登録するためのクラスを作成します。次の点に注意する必要があります。
# 列表页属性
list_display = ['pk', 'gname', 'gdate', 'ggirlnum', 'gboynum', 'isDelete'] # 设置要显示的字段
list_filter = ['gname'] # 设置过滤器
search_fields = ['gname'] # 设置搜索器
list_per_page = 5 # 设置每页显示的条数
# 添加、修改页属性
fields = ['ggirlnum', 'gboynum', 'gname', 'gdate', 'isDelete'] # 修改添加顺序
'''
fieldsets = [ # 给添加的属性进行分组
("num", {"fields": ['ggirlnum', 'gboynum']}),
("base", {"fields": ['gname', 'gdate', 'isDelete']}),
]
'''
この部分では、フォームの表示制約と追加時の制約について説明します。特定の関数はコードで注釈が付けられています。テーブルデータの追加を制限する場合、フィールドとフィールドセットは2つのうちの1つを選択することによってのみ制限できます。
- 関連オブジェクト
外部キー関係に従って、studentテーブルはclassテーブルに関連付けられているため、クラスを作成するときに、この関係に基づいてクラスに参加するための2つの追加のstudent情報を作成できます。
# 关联创建(当创建班级表时附带要创建两个学生信息)
class StudentsInfo(admin.TabularInline): # 也可以用admin.StackedInline
model = Students # 对于要关联的表进行标注
extra = 2 # 对于要额外创建的个数进行限制
最初に関連するクラスを作成し、それをクラス登録クラスに追加しますinlines = [StudentsInfo] # 关联创建时使用
- ブール値の判断
テーブルを作成するとき、一部のフィールドはブール値タイプであることが多いため、表示するときにtrueとfalseで表示されますが、これは私たちの意図ではなく、男の子にはtrue、女の子にはfalseを使用するだけです。 。したがって、ブール値をフィルタリングする必要があります。
def gender(self):
if self.sgender:
return "男"
else:
return "女"
# 对于字段名进行重定义
gender.short_description = "性别"
このコードを学生テーブル登録に記述します。ブール値を表示する結果に変換し、表示するフィールドの定義名を変更できます。
- 実行位置
# 执行动作位置
actions_on_top = False
actions_on_bottom = True
ビューを定義する
- django MTVプログラミングモデルによると、ページごとに独自のビューをカスタマイズする必要があります。まず、アプリのビューを紹介
from django.http import HttpResponse
してから、クラスを記述して定義します。
def index (request):
return HttpResponse("You are so cute!")
- ビューを定義し
from django.conf.urls import include
たら、URLを構成する必要があります。まず、プロジェクトディレクトリのurls.pyファイルのインポートを変更し、URLPATTERNS配列に追加しpath("",include('myAPP.urls'))
ます。アプリのアプリケーションディレクトリにurls.pyファイルを作成します。次の操作を実行します。
from django.conf.urls import url
from . import views
urlpatterns=[
path("",views.index)
]
- 最後に、テンプレートを作成します。アプリケーションとメインパッケージのstatisticsディレクトリの下にtemplatesディレクトリを作成し、テンプレートのパスを構成します。[os.path.join(BASE_DIR、 'templates)を' DIRS 'に追加します。 in TEMPLATES in settings.py ')]
上記の作業が完了したら、簡単なページング操作を実行できます。以下は、私のビュー、URL定義、およびテンプレートの例です。
- 見る
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse("you are so cute!")
# 查看班级表视图
from .models import Grades
def grades(request):
# 去模板里取数据
gradesList = Grades.objects.all()
# 将数据传递给模板,模板在渲染页面,将渲染好的页面返回浏览器
return render(request, 'myAPP/grades.html', {
"grades": gradesList})
# 查看学生表视图
from .models import Students
def students(request):
# 去模板里取数据
studentsList = Students.objects.all()
# 将数据传递给模板,模板再渲染页面,将渲染好的页面返回浏览器
return render(request, 'myAPP/students.html', {
"students": studentsList})
def gradesStudents(request,num):
grade = Grades.objects.get(pk=num)
studentsList = grade.students_set.all()
return render(request, 'myAPP/students.html', {
"students": studentsList})
- URL
from django.conf.urls import url
from django.urls import path
from . import views
urlpatterns = [
url(r'^$', views.index),
path('grades', views.grades),
path('students', views.students),
path('grades/<int:num>', views.gradesStudents) # 这里的num要与视图中定义的函数形参名字一致
]
- テンプレート
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>学生页面展示</title>
</head>
<body>
<h1>学生页面展示</h1>
<ul>
{
% for student in students %}
<li>{
{
student.sname }}--{
{
student.scontend }}</li>
{
% endfor %}
</ul>
</body>
</html>