django实现简单的后台管理页面和部分数据展示

以下步骤展示了简单的流程:

创建工程

配置工程

简单的模型设计

搜索并简单修改前台页面

表单显示

搜索重置

过滤器等功能

注:仅供个人回顾用

1. 基本方法
action 提交地址
method 指定请求方式,默认不填为get,post请求安全性更高
csrf_token 注释或添加到html中可防止校验

input框
checkbox 多选框
enctype='multipart/form-data' 上传文件必填参数
multiple 上传多个文件必填参数
type 为file可上传文件

request.method
request.FILES.get
request.FILES.getlist
line in file.chunks()


2. 创建工程并配置
django-admin startproject tzcrm

zh-hans  语言本地化
Asia/Shanghai  时区设置

3. 创建并注册teacher应用
python manage.py startapp teacher


4.创建并配置数据库 tzcrm

数据库配置基本信息

NAME
USER
PASSWORD
HOST
PORT
CHARSET

从已有数据库语句到到创建数据库语句
show create database crm;

改为
CREATE DATABASE `tzcrm` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
就创建出了tzcrm

配置数据库后出错如下:
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
解决方式:网上搜索,修改
/home/pyvip/.virtualenvs/tzcrm/lib/python3.6/site-packages/django/db/backends/mysql/base.py
注释掉以下两行语句
if version < (1, 3, 13):           
raise ImproperlyConfigured(‘mysqlclient 1.3.13 or newer is required; you have %s.’ % Database.version) 

注:如果用django2.1.7和pymysql 0.9.3就不会出现此问题


5. 创建模型类,创建数据表,数据迁移
python manage.py makemigrations teacher
python manage.py migrate teacher

 

6. 切换ipython,给模型添加数据

pip install ipython
python manage.py shell

from teacher.models import Grade, Student
g1 = Grade.objects.create(name='Django框架', num='7')
g2 = Grade.objects.create(name='python进阶', num='45')
Student.objects.create(name='心蓝', age=16, grade=g1)
Student.objects.create(name='潘毅', age=16, grade=g2)

7.创建简单路由

1)创建模板存放路径:
①项目根目录下创建一个templates文件夹,在此文件夹下以应用名再创建一层目录

②在settings文件中的TEMPLATES字典中的DIRS关键字值列表中添加
os.path.join(BASE_DIR, 'templates')

③配置简单的HTTPResponse响应,测试路由配置是否正确

2)创建静态文件存储路径
①在项目根目录下创建文件夹static,用于存放静态文件

②settings文件中最后添加
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
这个 STATICFILES_DIRS 一定要写对,否则无法加载静态文件

③去bootstrap 3网站找比较好看的模板
https://v3.bootcss.com/getting-started/
起步菜单
下翻找到Carousel(https://v3.bootcss.com/examples/dashboard/),实际上是一个后台模板
右键--》查看网页源代码
全选复制
在模板应用路径下创建一个base.html文件并粘贴

④修改7->1)->③中配置的响应为
return render(request, 'teahcer/base.html')

⑤重新启动django服务,访问页面
http://127.0.0.1:8000/teacher/students/

⑥启动服务后,会有许多404错误,这些是未找到的静态文件,可以直接打开对应网址,复制并在项目static目录下创建css,js,img等目录存放这些

⑦在base.html 中还有一些兼容配置,支持ie9等的,可以将其删除,以免影响性能

⑧引入css:
在base.html开头位置 添加 {% load static %}
在使用css的位置,用 {% static 'teacher/css/dashboard.css' %} 替换并指定当前路径
注:此处teacher为static目录下的应用名称目录

2)挖坑抽取模板
①目标是将原模板修改成如下样子

②参照原网站样式修改base.html中的信息

③对标题和Section title以及table-responsive挖坑

 

 

④在模板路径下创建学生列表文件student_list.html

⑤在student_list.html中继承base模板,如下
{% extends 'teacher/base.html' %}
{% block title %}学生列表{% endblock %}
{% block content %}{% endblock %}

⑥修改student list视图函数对应的路由模板
def student_list_view(request):
# return HttpResponse('学生列表')
return render(request, 'teacher/student_list.html')

⑦启动django服务看效果


8. 查询数据并显示到页面

1)修改视图函数

2)将数据库的值显示到页面

 

3)添加搜索功能
①搜索框页面样式
https://v3.bootcss.com/css/#tables
到bootcss 3网站-->全局css样式-->表单,找到如下内容,复制粘贴

 

初步修改为如下,并添加到紧邻 <h2 class="sub-header">{{ section }}</h2> 的位置
<div class="container" style="margin-bottom: 10px">
<form class="form-inline">
<div class="form-group">
<label for="exampleInputName2">姓名</label>
<input type="text" class="form-control" id="exampleInputName2" placeholder="在此输入想搜索的人名" name="name">
</div>
<button type="submit" class="btn btn-primary">搜索</button>
</form>
</div>

btn-primary 控制搜索按钮为蓝色
最外层添加div并使style="margin-bottom: 10px",确保搜索框与表格之间有10px间距,且对齐

②视图函数实现搜索功能
def student_list_view(request):
# return HttpResponse('学生列表')
section = '学生列表'
students = Student.objects.all()
search_info = request.GET.get('search_info', None)
# 查询
if search_info:
if search_info.isdigit():
students = students.filter(phone=search_info)
else:
students = students.filter(name=search_info)

context = {
'students': students,
'section': section,
'search_info': search_info,
}

return render(request, 'teacher/student_list.html', context=context)

③实现按钮重置, 参考
<div class="container" style="margin-bottom: 10px">
<form class="form-inline">
<div class="form-group">
<label for="exampleInputName2">姓名</label>
<input type="text" class="form-control" id="exampleInputName2"
placeholder="在此输入姓名或电话查询" name="search_info"
value="{{ search_info|default:'在此输入姓名或电话查询' }}">
</div>
<button type="submit" class="btn btn-primary">搜索</button>
<a href="{% url 'teacher:student_list' %}" class="btn btn-primary"
role="button">重置</a>
</form>
</div>

9. 自定义过滤器处理性别显示为数字的情况
①在应用下创建python包 templatetags
注意:
此文件夹名称必须是templatetags,
必须是一个python包,
必须在要应用过滤器的应用目录下

②在文件夹templatetags文件夹下创建python文件 teacher_customer_filter.py
自定义过滤器
from django.template import Library

register = Library()

def my_male(value):
'''
转换性别的过滤器
:param value:
:return:
'''
mp = {
0: '女',
1: '男',
}
return mp[value]
# 注册
register.filter(my_male)


③在html中应用过滤器函数
<td>{{ student.sex|my_male }}</td>


遗留:支持中英文的过滤器呢?
# 上面的装饰器写法
@register.filter(name='aaa')
def my_male(value, lang='zh'):
'''
转换性别的过滤器,支持中英文
:param value:
:return:
'''
# 通过嵌套字典给出中英文切换
mp = {
'zh': {0: '女', 1: '男'},
'en': {0: 'female', 1: 'male'}
}
return mp[lang][value]

<td>{{ student.sex|my_male:'en' }}</td>

猜你喜欢

转载自www.cnblogs.com/zhanghaibin16/p/12110028.html