Python实例---基于页面的后台管理[简单版]

摘要:
后显示文件内容文件上传三:基于form表单和iframe自己实现Ajax上传兼容性好,因为早期的浏览器不支持formdata其他代码学习

image

后台管理菜单 + 母板[css/content/js]

向后台提交数据[2种]:
1. 模态对话框(数据少操作,且Js复杂):
form表单 :优点:简单,前端提交后后台处理完成后直接redirect;
缺点:无法显示错误信息
Ajax提交 :
- 有错误,显示错误;无错误,通过js的 location.relad() 刷新页面
- 有错误,显示错误;无错误,自己局部添加
[Jquery的委托绑定 $('父集').on('click','子集',function(){})]
- 注意后台返回给Ajax的数据以及是字符串[需要转换为JSON]
- 注释掉settings.py里面的CSRF
2. 单独页面提交数据(数据多,数据大操作):
form表单: ..
分页
Django分页: 有一个类,定义好了方法
自定义分页:
- 数据从数据库来
-
编辑数据:
模态对话框: 有一个隐藏ID
PS:通过for循环和自定义属性实现动态的赋值
可以根添加用一个对话框,在编辑的时候,需要把内容放在value里,id放入隐藏的标签内,点击提交后提交到编辑的URL
也可以通过单独的URL来进行编辑,需要动态传值[推荐]

简单讲有2中方式:

数据量小: 对话框 --》判断格式,是否为空

数据量大; 新URL

因为前端浏览器可以禁用,或者不用浏览器来进行后台的数据访问,所以所有的限制最好是在后台进行操作。

 sql:   update tbl set caption='' where id = 1
 orm:  models.Classes.objects.filter(id=1).update(caption='XXX')

删除:
弹出框 + 获取到ID后删除

[在模态对话框框的删除编辑页面内写一个input来获取当前的ID然后在后台进行删除]

JS有一个绑定事件方法onclick():
Jquery的on,on表示事件委托,点击的时候绑定事件类型然后执行某个函数[3个参数]
模板左侧菜单:
注意样式 ,CSS + Content + JS

分页:
封装成了一个组件然后去操作

文件上传:

image
XSS:
默认我们从后台反馈的所有字符串都按照字符串进行渲染,防止XSS攻击[比如有人评论我们的博客是,写的是一段JS代码,如果浏览器直接执行此代码的话,我们的页面会奔溃]

xss问题提出:

image

image

xss问题解决:

1. 后台控制

image

2. 前台控制

image

知识点回顾

1、数据库操作
- 单表操作
- all
- filter
models.tb.objects.filter(id=123)
dic = {'id': 123, 'age__gt': 3}
models.tb.objects.filter(**dic)
- count
- order_by
...
- 一对多
# id name
1 河北
2 广东
3 山东
class Province(models.Model):
name = models.CharField(max_length=32,)
# nid = models.Intergar(unique=True) # 唯一
# id name pro
1 东莞 2
2 深圳 2
3 惠州 2
4 河源 2
5 泰安 3
6 青岛 3
7 济南 3
8 张家口 1
9 邢台 1
class City(models.Model):
name = models.CharField(max_length=32)
pro = models.ForeignKey("Province", to_filed='id')
############故意写错参数字段然浏览器可以告诉我们字段
############正向反向都是根据left join来进行关联的
1、 正向查找【具有外键字段,3种方式】
result = models.City.objects.all() --> 对象.XXX 取值
result[0].pro.name
# 2个下划线表示关联下一个表
models.City.objects.all().values('id','name','pro_id','pro__id','pro__name') --> 拿到的是字典
models.City.objects.all().values_list('id','name','pro_id','pro__id','pro__name') --> 拿到的是元组
2、反向查找【3种方式】
result = models.Province.objects.values('id','name', 'city__name')
result = models.Province.objects.all() # 多个数据
result[0] # 获取某个省
result[0].city_set # QuerySet类型. 返回None,因为我们可能获取全部也可以只获取部分
result[0].city_set.all() # 获取河北下的所有市 张家口 、邢台
result[0].city_set.filter(id__lt=4) # 获取河北下的所有市 张家口 、邢台

for pro in result:
a1 = pro.id
a2 = pro.name
a3 = pro.city_set.all()
print(a1,a2,a3)
=====> 多对多即使基于一对多来构造
多对多【看1.5/1.6章节内容】
2、cookie,session必须要会
3、分页
4、 def index(request):
request.POST.get('k')
# checkbox --注意name相同,
# select[multiple]的多选 --name可以不同
request.POST.getlist('k') # 获取全部的前台内容
5、模板语言进行渲染的时候,调用函数不需要带括号()

image

模版引擎渲染字典

image

image

image

6、包含和不包含的使用:

image

7、JQuery和DOM对象之间的转换

image

8、关于实现前台展示教师以及选择的班级:

$('#sel').val() --> 再开一个select,将这些内容在放入一次

后台取出数据后 --> 再开一个select,将这些内容selected一次

利用DOM的selectedoptions和Jquery的appendTO方法结合

image

9、模版语言获取数组内容:

image

10、form表单的onclick

image

11、三元运算符复习

image

文件上传

image

文件上传一:基于Form表单:只要已上传,页面就会刷新

未添加:

image

添加后:

image

文件上传位置:

image

浏览器直接访问:因为Django里面进行了设置,static默认指引到statics目录下

所以我们只需要在数据库内保存文件的路径即可。

【引申】

创建IMG的model,里面有path参数,然后migtations创建数据库

将文件写入本地的同时将路径写入数据库,下次访问的时候取数据库内取数据

<img src="http://t.zoukankan.com/{{ imgItem }}">

imageimage

文件上传二:Ajax上传

要求:

悄悄上传文件 [1. xmlHttpRequest对象实现原生Ajax 2.jQuery实现Ajax]image

特别推荐:利用FormDate对象来传递数据。

image

image

后显示文件内容

文件上传三:基于form表单和iframe自己实现Ajax上传

兼容性好,因为早期的浏览器不支持formdata

其他

代码学习

免责声明:文章转载自《Python实例---基于页面的后台管理[简单版]》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Ubuntu 下安装、使用tree 查看目录的树形结构C#中的WebBrowser控件的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python数据处理(二)

一、csv 文件格式二、excel数据处理2.1读取单表文件:2.2 读取单表文件复杂例子:2.3、写入excel文件2.5、Python进行修改excel文件:三、Python处理pdf文件3.1、Python读出pdf文件3.2、抓取每个的网页,然后生成pdf文件3.3、Html转pdf文件四、Python处理图片4.1 Image的三个属性:4.2...

[译]Selenium Python文档:二、初步开始

2.1.简单使用 如果已经安装好了Selenium Python,你就可以像下面这样编写Python代码来使用它了: from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox() driver.get(...

python中如何调用.py文件

这里分为两种情况。 一、在python的安装目录下 直接在IDLE中输入from 文件名 import *命令即可。 注意new1.py文件中内容,有print语句。 二、未在python的安装目录下 使用命令为: 1.import sys #引入sys库体,python的信息模块 2.sys.path.append("路径") #系统路径中填写存放....

guxh的python笔记三:装饰器

1,函数作用域 这种情况可以顺利执行: total = 0 def run(): print(total) 这种情况会报错: total = 0 def run(): print(total) total = 1 这种情况也会报错: total = 0 def run(): total += 1...

Vs2005中使用Ajax(二)【转】

原帖地址:http://www.blogjava.net/Microhelp/articles/147114.html 1. 这里要做的是一个省市区三级联动的下拉列表框,效果如下图。在前面的项目中,新建页面AjaxForm2.aspx,添加三个DropdownList,添加一个textbox和一个button <table>          ...

吴裕雄 python 机器学习——模型选择参数优化随机搜索寻优RandomizedSearchCV模型

import scipy from sklearn.datasets import load_digits from sklearn.metrics import classification_report from sklearn.linear_model import LogisticRegression from sklearn.model_sel...