使用@property装饰器编写获取变量值和为变量赋值的函数并演示效果?
// class Person:
def __init__(self,name,age):
self.my_name=name
self.my_age = age
@property
def name(self):
print("===读取变量值时自动调用:name(self)===")
return self.my_name
@name.setter
def name(self,name):
print("===为变量赋值时自动调用:name(self,name)===")
self.my_name=name
if __name__ == '__main__':
p1 = Person("张三",20)
name = p1.name
print("name=",name)
p1.name="小三"
name = p1.name
print("name=",name)
不使用数据库的情况下,利用generate_password_hash和check_password_hash函数完成模拟登录效果?
// from werkzeug.security import generate_password_hash, check_password_hash
class User:
def __init__(self, user_name, password):
self.user_name = user_name
self.password = password
@property
def password(self):
return self.password_hash
@password.setter
def password(self, password):
self.password_hash = generate_password_hash(password)
def login(self, user_name, password):
if self.user_name == user_name:
if (check_password_hash(self.password, password)):
return "【%s】登录成功" % user_name
else:
return "密码【%s】错误" % password
else:
return "用户名【%s】错误" % user_name
if __name__ == '__main__':
p1 = User("admin", "12345")
# 模拟用户名错误
print(p1.login("hsj", "12345"))
# 模拟密码错误
print(p1.login("admin", "hsj"))
# 模拟登录成功
print(p1.login("admin", "12345"))
在前端向后端传递json字符串的情况下,如果解决跨站伪造攻击防护问题?
// function getCookie(name) {
var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
return r ? r[1] : undefined;
}
//调用ajax向后端发送注册请求
$.ajax({
url:"/api/v1.0/users", //指定提交的目标地址
type:"post", //指定客户端的提交方式
data:req_json, //指定前端向后端发送的请求体中的数据
contentType:"application/json", //指定前端向后端发送json格式的数据
dataType:"json", // 指定后端向前端回送的是json格式的数据
headers:{
//X-CSRFTOKEN
"X-CSRFToken":getCookie("csrf_token")
},
// 当后端成功处理请求后自动回调的函数,形参resp就是后端返回给前端的js对象
success:function (resp) {
alert("resp="+resp+",type(resp)="+typeof(resp))
if (resp.errno=="0"){
//注册成功,跳转到首页
location.href="/index.html"
}else{
alert(resp.errmsg)
}
}
})