当前位置: 首页 > news >正文

百度一下做网站/公司网站免费自建

百度一下做网站,公司网站免费自建,专业外贸网站开发,做影视网站侵权吗前后端校验 在校验的过程当中,我们分为前端校验和后端校验。 1、前端校验 前端校验:使用前端js进行页面数据的校验,校验通过,再提交。优点:编写简单,缺点:安全性能不够。 bule_print.route(…

前后端校验

在校验的过程当中,我们分为前端校验和后端校验。

1、前端校验

前端校验:使用前端js进行页面数据的校验,校验通过,再提交。优点:编写简单,缺点:安全性能不够。

@bule_print.route("/check/", methods=["GET", "POST"])
def check():return render_template("front_end_check.html")
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="../static/dist/css/bootstrap.css"><script src="../static/jquery.min.js/"></script><script src="../static/dist/js/bootstrap.js"></script>
</head>
<body>
<!-- onsubmit返回true则继续提交,否则不可以提交,调用js函数,根据js函数来校验是否可以提交 -->
<form class="form form-horizontal container" onsubmit="return check()"><br><div class="form-group"><lable class="col-md-4 control-label">用户名:</lable><div class="col-md-6"><input class="form-control" name="username" id="username_check"></div></div><div class="form-group"><lable class="col-md-4 control-label">密码:</lable><div class="col-md-6"><input class="form-control" name="password"></div></div><div class="form-group"><input type="submit" class="btn btn-success pull-right"></div>
</form>
<script>function check() {var user = $("#username_check").val();var len = user.length;if (len<6 || len>16){alert("用户名长度不合法,字符在6~16之间");return false} else {return true}}
</script>
</body>
</html>

2、后端校验

后端校验:就是当数据传递到后端视图进行校验,缺点:编写比较繁复,优点:安全性好。

后端校验可以直接在视图中编写,但太过复杂,所有采用flask-wtf

安装包

pip install flask-wtf

Wtf插件安装会安装两样东西:

​ 一个表单定义类

​ 一个表单字段定义类这两个类结合可以定义出一个对表单进行描述的类,

​ 对表单描述的类可以直接在前端生成表单。

常用的表单字段:

校验规则:

2.1 采用表单定义类生成的表单验证

2.1.1 校验规则的使用

在views同级目录创建form.py文件

# form.pyfrom flask_wtf import FlaskForm
import wtforms
from wtforms import validatorsclass RegisterForm(FlaskForm):username = wtforms.StringField(# 文本label="用户名",# 验证规则validators=[validators.Email(message="邮箱")])password = wtforms.PasswordField(# 文本label="密码",# 验证规则validators=[validators.DataRequired(message="密码必填")])repassword = wtforms.PasswordField(# 文本label="重复输入密码",# 验证规则validators=[validators.EqualTo("password", message="密码不一致")])
# view.py# 后端验证
@user_print.route('/register', methods=["GET", "POST"])
def register():my_form = RegisterForm()if request.method == "POST":if my_form.validate_on_submit():print("注册成功!")else:print(my_form.username.errors)  # ['邮箱']print(my_form.errors)  # {'username': ['邮箱'], 'repassword': ['密码不一致']}return render_template("register.html", **locals())
<!-- register.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="/register" method="post">{% for i in my_form %}<p>{{ i.label }}:{{ i }}</p>{% endfor %}<input type="submit">
</form>
</body>
</html>

2.1.2 自定义校验规则
# form.pyfrom flask_wtf import FlaskForm
import wtforms
from wtforms import validators, ValidationErrordef check_username(form, field):"""自定义校验:验证用户名不能包含敏感信息:param form: 表单:param form:字段"""print("当前字段的值:", field.data)data_list = ["admin", "nb"]# 判断for data in data_list:if field.data.find(data) != -1:raise ValidationError("用户名不能包含敏感信息")class RegisterForm(FlaskForm):username = wtforms.StringField(# 文本label="用户名",# 验证规则validators=[validators.Length(min=2, max=16, message="用户名长度在2-16之间"),check_username])password = wtforms.PasswordField(# 文本label="密码",# 验证规则validators=[validators.DataRequired(message="密码必填")])repassword = wtforms.PasswordField(# 文本label="重复输入密码",# 验证规则validators=[validators.EqualTo("password", message="密码不一致")])
# view.py# 后端验证
@user_print.route('/register', methods=["GET", "POST"])
def register():my_form = RegisterForm()if request.method == "POST":if my_form.validate_on_submit():print("注册成功!")else:print(my_form.username.errors)  # ['邮箱']print(my_form.errors)  # {'username': ['邮箱'], 'repassword': ['密码不一致']}return render_template("register.html", **locals())
<!--register.html--><!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="/register" method="post">{% for i in my_form %}<p>{{ i.label }}:{{ i }}</p>{% endfor %}<input type="submit">
</form>
</body>
</html>

2.2 使用前端写好的表单校验

跨站点请求伪造(Cross-site request forgery),CSRF跨站请求伪造:使用当前浏览器还在生效状态的cookie对指定网站进行操作。最初针对的是银行网站的转账。

防御策略:csrf检验
在请求之初,Flask服务会给用户下发一个随机校验值,用户提交数据的时候,携带校验值,这个校验值每次刷新页面都不一样,没有或者错误的校验值,访问被拒绝。csrf检验只针对post请求有效,对get不检测

2.2.1 配置csrf

首先要保证前端的name和定义的校验表单字段一样

2.2.2 设置csrf关联app
# 蓝图csrf配置# 创建空的对象
db = SQLAlchemy()
csrf = CSRFProtect()def create_app(obj):"""创建app函数:param obj: 配置文件类:return: goods"""app = Flask(__name__)  # 创建appapp.config.from_object(obj)  # app的配置类# db与app关联db.init_app(app)# csrf与app关联csrf.init_app(app)# 该引用必须放在函数里面,不然会循环引用from BluePrint.user import user_print# 注册蓝图app.register_blueprint(user_print)return app# 创建app
app = create_app(Develop)
2.2.3 前端应用

在模板的form中,使用csrf_token方法获取csrftoken,并提交

2.2.4 指定视图不检测

from BluePrint import csrf@csrf.exempt
@user_print.route('/aaa', methods=["POST"])
def aaa():return "aaa"
http://www.jmfq.cn/news/5103865.html

相关文章:

  • 网站开发合同技术目标/今天刚刚发生的重大新闻
  • 江苏屹峰建设网站/郑州seo关键词排名优化
  • 微信网站建设报价单/站长统计app下载免费
  • 济南网站建设公司电子商务网站/在线seo
  • 12306网站是阿里做的/排名优化怎么做
  • 贵阳网站设计阳光创信好吗/找培训机构的平台
  • 如何在大网站做外链/八百客crm系统登录入口
  • 查互做蛋白的网站/1688黄页大全进口
  • 同性性做视频网站/广州网站优化排名
  • 建设银行官方网站个人/公司的网站
  • 做一个推广网站多少钱/武汉网优化seo公司
  • 智慧团建登录入口官网电脑版/西安百度网站快速优化
  • 网站优化排名优化/网络营销推广活动
  • 360提交网站备案/什么平台引流最快
  • 百度的广告怎么免费发布/上海seo外包公司
  • 设计logo网站免/线下营销推广方式都有哪些
  • 全能网站建设/ip软件点击百度竞价推广
  • 政府网站字体/优化大师客服电话
  • 织梦下载网站模板/nba最新交易消息
  • 创网站需要什么/企业网站推广方案设计
  • 做网站需要服务器和什么软件/百度推广搜索排名
  • 怎样制作网站二维码/今日新闻国内大事件
  • 网站建设工资待遇/网上教育培训机构排名
  • 做视频的软件模板下载网站/seo搜索引擎优化步骤
  • 高价词网站源码/二级域名免费分发
  • 可以做puzzle的网站/网站seo招聘
  • 做电影种子下载网站违法吗/最新热搜榜
  • jsp做网站用到什么技术/兰州seo整站优化服务商
  • b2c平台是什么意思/苏州seo关键词优化推广
  • 设计师查询网站/google chrome浏览器