django自我学习之基本流程走通(二)
程序员文章站
2022-07-05 11:18:20
七,启动服务器在前序配置工作完成之后,就可以正式开始启动我们的服务器,这是一个django提供的轻量级服务器,仅限于开发调试,在文档中我看到一句话(“我们是web框架的专家,但并非web服务器专家”)。我们可以用命令行进行启动服务器python manage.py runserver ip:port #(ip和端口可以不写,默认为本机以及8000端口)八,Admin站点管理概述:关于数据库内容的发布,以及复制增,删,改,查首先我们要配置admin应用,在setting.py中的INST...
七,启动服务器
在前序配置工作完成之后,就可以正式开始启动我们的服务器,这是一个django提供的轻量级服务器,仅限于开发调试,在文档中我看到一句话(“我们是web框架的专家,但并非web服务器专家”)。
- 我们可以用命令行进行启动服务器
python manage.py runserver ip:port #(ip和端口可以不写,默认为本机以及8000端口)
八,Admin站点管理
概述:关于数据库内容的发布,以及复制增,删,改,查
- 首先我们要配置admin应用,在setting.py中的INSTALLED_APPS中添加admin.contrib.admin
- 创建管理员用户:
- 执行
python manage.py createsuperuser
命令依次输入用户名,邮箱,密码 - 登录管理界面的网站为…/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']}),
]
'''
这一部分是对于表单的显示约束以及添加时约束,具体功能已注释于代码当中,在限定增加表数据的时候,fields和fieldsets只能二选一进行限制。
-
关联对象
我们根据外键关系,学生表是关联于班级表,所以在创建班级的时候,我们可以根据这种关系进行额外创建两个学生信息加入班级当中。
# 关联创建(当创建班级表时附带要创建两个学生信息)
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编程模式,我们应该给每一个页面都定制属于自己的视图,首先我们来到app的views当中引入
from django.http import HttpResponse
再编写类进行定义。
def index (request):
return HttpResponse("You are so cute!")
- 定义完成视图之后,我们要进行URL的配置,首先修改project目录下的urls.py文件中导入
from django.conf.urls import include
,并在URLPATTERNS数组中添加path("",include('myAPP.urls'))
在app的应用目录下创建一个urls.py文件中完成以下操作:
from django.conf.urls import url
from . import views
urlpatterns=[
path("",views.index)
]
- 最后我们去创建模板,我们在应用和主包的统计目录下创建templates目录,并且配置模板的路径,在settings.py中TEMPLATES中的’DIRS’中加入[os.path.join(BASE_DIR,‘templates’)]
完成以上工作,我们就可进行简单的分页交互,以下为我的视图,URL定义,模板示例:
- view
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>
本文地址:https://blog.csdn.net/baldicoot_/article/details/107158570