Django运维后台的搭建之二:建立template和对应的ModelForm

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

在前一篇我们已经建立了一套数据库用来存储我们的云资源资料以及有了一个简单的admin后台,但是这个后台毕竟太难看了,我们可以自己搭建一个更漂亮的界面来满足领导的需求,那么这个时候就需要template。在template中,我们存放HTML页面,并通过Django的API能够调用这些界面,同时能够把一些数据传递到这些页面上。


1.我们在之前已经建立好的Online文件夹里建立一个templates文件夹。


2.url.py里制定访问的网页路径,在这里我们先制定两个,一个是线上服务器的界面,另一个是数据库:

1
2
3
4
5
6
7
8
from django.conf.urls  import  url
from django.contrib  import  admin
import  Online.views
urlpatterns = [
     url(r '^admin/' , admin.site.urls),
     url(r '^alionlineecs/' , Online.views.alionlineecs),
     url(r '^rds/' , Online.views.rds),
]

3.在views.py里写上对应的函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# -*- coding: UTF-8 -*-
from django.shortcuts  import  render
from .models  import  alionlineECS,RDS     #这里的import是来自model.py里的
def alionlineecs(request):
     data = alionlineECS.objects.all()     #这里也是要跟model.py一样
     context = {
         'data' : data,
     }
     #跳转到相应页面,并将值传递过去
     return  render(request, 'alionlineecs.html' ,context)     #规定alionlineecs.html作为展示页
     
def rds(request):
     data = RDS.objects.all()
     context = {
         'data' :data,
     }
     return  render(request, 'rds.html' ,context)


这个代码里面我写了 data=alionlineECS.objects.all(),这是通过DJANGO的ORM来进行SQL操作,建立context这个字典,将data值传递到相应页面。


4.在template文件夹里面建立alionlineecs.html和rds.html 这两个文件,alionlineecs.html如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html>
<html>
< head  lang= "en" >  
     <meta charset= "UTF-8" >  
     <title>< /title >  
< /head >
<body>
     <table>
         < tr >
             <th>云服务器名称< /th >
             <th>云服务器类型< /th >
             <th>云服务器内网地址< /th >
             <th>云服务器外网地址< /th >
             <th>云服务器外网带宽< /th >
             <th>云服务器配置< /th >
             <th>备注< /th >
         < /tr >
         {%  for  item  in  data %}
             < tr >
                 <td>{{ item.ecs_name }}< /td >
                 <td>{{ item.ecs_type }}< /td >
                 <td>{{ item.ecs_inip }}< /td >
                 <td>{{ item.ecs_outip }}< /td >
                 <td>{{ item.ecs_ipwidth }}< /td >
                 <td>{{ item.ecs_spec }}< /td >
                 <td>{{ item.ecs_remarks }}< /td >
             < /tr >
         {% endfor %}
     < /table >
< /body >
< /html >

而rds.html的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html>
<html>
< head  lang= "en" >  
     <meta charset= "UTF-8" >  
     <title>< /title >  
< /head >
<body>
     <table>
         < tr >
             <th>数据库名称< /th >
             <th>数据库类型< /th >
             <th>mysql版本< /th >
             <th>数据库规格< /th >
             <th>数据库地址< /th >
             <th>备注< /th >
             <th>存储空间< /th >
         < /tr >
         {%  for  item  in  data %}
             < tr >
                 <td>{{ item.rds_name }}< /td >
                 <td>{{ item.rds_type }}< /td >
                 <td>{{ item.rds_mysql }}< /td >
                 <td>{{ item.rds_spec }}< /td >
                 <td>{{ item.rds_ip }}< /td >
                 <td>{{ item.rds_remark }}< /td >
                 <td>{{ item.rds_status }}< /td >
             < /tr >
         {% endfor %}
     < /table >
< /body >
< /html >

可以看出item里面的各个项就是model.py里面的项,这样就会一一对应。其中用{% %}括起的就是django的模板语言,在django的模板语言中,包含了类似于for循环,if等条件判断语句,可以非常灵活地满足用户的各种需求。其中,` data `用来在页面上显示data的值。此后,我们还将提到的include和block功能,将会非常方便地继承网页。


5.现在去启动django,然后在浏览器进入admin后台,添加两个rds实例,比如:

wKiom1ll_8yjoGALAAB1XTXQhyQ395.png


然后在浏览器尝试url中定义的rds的路径,就可以访问相应页面了:

wKioL1lmAB2wdiKFAAC6wUy17r0483.png


但是我们还是不希望进入admin去改,毕竟 admin是后台,我们还是更希望在页面里进行增删改查的工作,那么要通过页面往数据库里传递数据是要通过表单的,而django的表单就叫做forms。这里我们使用ModelForm,因为我们之前已经写了一个model.py,而要添加的内容肯定都是model.py里的项,所以就采用ModelForm,改动很小,甚至可以用ModelForm来改model.py。


  1. 首先现在Online这个文件夹里面建立一个叫form.py,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# -*- coding: UTF-8 -*-  
from  django.forms  import  ModelForm
from  .models  import  alionlineECS,SLB,RDS     #这里暂时先加这三项
#定义Node的Form,Form名字为 模式名+Form
class  alionlineForm(ModelForm):
     #自定义ModelForm的内容
     class  Meta:
         #该ModelForm参照Model: alionlineECS
         model  =  alionlineECS
         #在Form中不显示注册人这个字段,下面也是 
         exclude  =  [ 'ecs_signer' ]
class  SLBForm(ModelForm):
     class  Meta:
         model  =  SLB
         exclude  =  [ 'slb_signer' ]
class  RDSForm(ModelForm):
     class  Meta:
         model  =  RDS
         exclude  =  [ 'rds_signer' ]

 2.由于要建立url与页面的关系, 我们要在url.py里追加这样的话:

1
2
3
url(r '^addalionlineecs/' , Online.views.addalionlineecs),
url(r '^addslb/' , Online.views.addslb),
url(r '^addrds/' , Online.views.addrds),


 3.然后还要在view.py里添加对应的函数关系:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from  forms  import  alionlineForm,SLBForm,RDSForm
def  addalionlineecs(request):
     #获取来自alionlineForm的表单数据  
     form  =  alionlineForm(request.POST  or  None )
     #判断form是否有效
     if  form.is_valid():
         #创建实例,需要做些数据处理,暂不做保存
         instance  =  form.save(commit = False )
         #将登录用户作为登记人
         instance.node_signer  =  request.user
         #保存该实例
         instance.save()
         #跳转至列表页面  
         return  redirect( '/alionlineecs/' )
     #创建context来集中处理需要传递到页面的数据  
     context  =  {
         'form' : form,
     }
     #如果没有有效提交,则仍留在原来页面  
     return  render(request,  'addalionlineecs.html' , context)

 4.来到template里新写一个addalionlineecs.html,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head lang = "en" >  
     <meta charset = "UTF-8" >  
     <title>< / title>  
< / head>
<body>
  <form method = 'POST'  action = ''>{ %  csrf_token  % }
         {{ form }}
         < input  type = 'submit'  value = '提交'  / >
  < / form>
< / body>
< / html>

 5.来到浏览器里,打开对应的addonlineecs.html就会看到添加的界面了,就不用在admin里添加了:

wKioL1lnKLmQLQ3ZAAEhe-I_6Mo124.png

点击旁边的“提交”之后,看到地址栏机会跳到alionlineecs这个界面:

wKioL1lnKPigRwT_AACw8RxiNxg692.png


这样一个基于页面的增删改查的环境就搭建完毕了。



 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1946950


相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
178 4
|
3月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
153 1
|
3月前
|
机器学习/深度学习 前端开发 数据挖掘
基于Python Django的房价数据分析平台,包括大屏和后台数据管理,有线性、向量机、梯度提升树、bp神经网络等模型
本文介绍了一个基于Python Django框架开发的房价数据分析平台,该平台集成了多种机器学习模型,包括线性回归、SVM、GBDT和BP神经网络,用于房价预测和市场分析,同时提供了前端大屏展示和后台数据管理功能。
101 9
|
3月前
|
数据采集 数据可视化 数据挖掘
基于Django的数据分析可视化系统,有后台,有增删改查,实现多用户登录
本文介绍了一个基于Django框架开发的今日头条数据分析可视化系统,该系统具备后台管理、增删改查功能以及多用户登录,利用数据可视化技术为新闻媒体行业提供数据管理和决策支持。
基于Django的数据分析可视化系统,有后台,有增删改查,实现多用户登录
|
3月前
|
前端开发 关系型数据库 MySQL
Python基于Django框架图书管理系统,Bootstrap框架UI,后台EasyUI框架UI,有登录,实现增删改查的富文本效果
本文介绍了一个使用Python Django框架开发的图书管理系统,该系统采用Bootstrap框架进行前端UI设计,EasyUI框架用于后台UI界面,集成了富文本编辑器,并实现了登录及增删改查功能。
|
3月前
|
运维 前端开发 Serverless
中后台前端开发问题之降低数据库使用门槛和运维成本如何解决
中后台前端开发问题之降低数据库使用门槛和运维成本如何解决
30 0
|
6月前
|
Python
百度搜索:蓝易云【Django自带的Admin后台中如何获取当前登录用户】
在上面的代码中,`@staff_member_required`装饰器确保只有管理员可以访问 `my_custom_view`视图,而 `@login_required`装饰器确保只有登录的用户可以访问该视图。然后,可以使用 `request.user.username`获取当前登录用户的用户名,并将其传递到模板中进行显示或其他操作。
56 3
|
前端开发 数据库 UED
为什么 Django 后台管理系统那么“丑”?
为什么 Django 后台管理系统那么“丑”?
|
6月前
|
算法 Java Python
Python【算法中心 01】Web框架Django入门(安装+项目创建+应用创建+服务启动)Python搭建算法中心后台实例分享
Python【算法中心 01】Web框架Django入门(安装+项目创建+应用创建+服务启动)Python搭建算法中心后台实例分享
84 0
|
11月前
|
XML 应用服务中间件 nginx
关于nginx部署Django 后台样式丢失
关于nginx部署Django 后台样式丢失
109 0