django自我学习之基本流程走通(二)

七,启动服务器

在前序配置工作完成之后,就可以正式开始启动我们的服务器,这是一个django提供的轻量级服务器,仅限于开发调试,在文档中我看到一句话(“我们是web框架的专家,但并非web服务器专家”)。

  • 我们可以用命令行进行启动服务器
python manage.py runserver ip:port  #(ip和端口可以不写,默认为本机以及8000端口)

八,Admin站点管理

概述:关于数据库内容的发布,以及复制增,删,改,查

  1. 首先我们要配置admin应用,在setting.py中的INSTALLED_APPS中添加admin.contrib.admin
  2. 创建管理员用户:
  • 执行python manage.py createsuperuser命令依次输入用户名,邮箱,密码
  • 登录管理界面的网站为…/admin
  1. 汉化问题
  • admin的站点管理页面为纯英文,若想要转为中文,我们要做以下配置:
    setting.py中修改 LANGUAGE_CODE = 'zh-Hans' TIME_ZONE='Asia/shanghai'
  1. 管理表
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只能二选一进行限制

  1. 关联对象
    我们根据外键关系,学生表是关联于班级表,所以在创建班级的时候,我们可以根据这种关系进行额外创建两个学生信息加入班级当中。
# 关联创建(当创建班级表时附带要创建两个学生信息)
class StudentsInfo(admin.TabularInline):  # 也可以用admin.StackedInline
    model = Students   # 对于要关联的表进行标注
    extra = 2          # 对于要额外创建的个数进行限制

先创建关联类,并且在班级注册类当中加入inlines = [StudentsInfo] # 关联创建时使用

  1. 布尔值判断
    我们在创建表的时候往往有些字段是布尔值得类型,这样在展示的时候,他就会以true和false展示,可这并非我们本意,我们只想用true表示男生,false表示女生,所以我们需要对布尔值进行过滤筛选。
def gender(self):
        if self.sgender:
            return "男"
        else:
            return "女"

    # 对于字段名进行重定义
    gender.short_description = "性别"

将这段代码写入学生表注册当中,可以将布尔值转换成我们想要的结果进行展示,并更换该字段的定义名进行展示。

  1. 执行动作位置
# 执行动作位置
    actions_on_top = False
    actions_on_bottom = True

定义视图

  1. 根据我们django的MTV编程模式,我们应该给每一个页面都定制属于自己的视图,首先我们来到app的views当中引入from django.http import HttpResponse再编写类进行定义。
def index (request):
	return HttpResponse("You are so cute!")
  1. 定义完成视图之后,我们要进行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)
]
  1. 最后我们去创建模板,我们在应用和主包的统计目录下创建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>

猜你喜欢

转载自blog.csdn.net/baldicoot_/article/details/107158570