欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-21 08:01:08
七,启动服务器在前序配置工作完成之后,就可以正式开始启动我们的服务器,这是一个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站点管理

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

  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>

本文地址:https://blog.csdn.net/baldicoot_/article/details/107158570