业务逻辑:
定义发送邮件函数:
def send_mail(send_to,filename,**kwargs):
mail=Mail(app)
with app.app_context():
msg=Message(
subject='测试',
recipients=send_to,
sender='1602923758@qq.com',
html=render_template(filename+'.html',
info=kwargs)
)
mail.send(msg)
注册:
@app.route('/register/',methods=['GET','POST'])
def register():
if request.method=='POST':
username = request.form.get('username')
password=request.form.get('password')
for user in users:
if user['username'] == username:
flash('用户已存在,请重试!')
return redirect(url_for('register'))
else:
users.append({'username':username,'password':password})
send_mail(send_to=['1602923758@qq.com'], filename='reg_msg', user=username)
flash('注册成功,请登录!')
return redirect(url_for('login'))
else:
return render_template('register.html')
登录:
@app.route('/login/',methods=['GET','POST'])
def login():
if request.method=='POST':
username=request.form.get('username')
password=request.form.get('password')
for user in users:
if user['username']==username and user['password']==password:
session['user']=username
# 获取客户端的主机名
hostname=request.host
# 获取客户端的ip地址
user_addr = request.remote_addr
# 获取当前时间
login_time = datetime.strftime(datetime.now(),'%Y-%m-%d,%H:%M:%S')
send_mail(send_to=['1602923758@qq.com'],filename='log_msg',user=username,addr=user_addr,log_time=login_time,host=hostname)
flash('用户登录成功')
return redirect(url_for('index'))
else:
flash('用户或密码错误,登录失败,请重试!')
return redirect(url_for('login'))
else:
return render_template('login.html')
页面逻辑:
基模板:
{% extends 'bootstrap/base.html' %}
{% block style %}
{{ super() }}
<link href="{{ url_for('static',filename='css/main.css') }}" rel="stylesheet">
{% endblock %}
{% block navbar %}
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Brand</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="active"><a href="{{ url_for('index') }}">主页 <span class="sr-only">(current)</span></a></li>
<li><a href="{{ url_for('list') }}">用户信息</a></li>
<li><a href="#">音乐</a></li>
<li><a href="#">书城</a></li>
</ul>
</div><!-- /.navbar-collapse -->
<ul class="nav navbar-nav navbar-right">
{% if session.get('user',None) %}
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">当前用户:{{ session['user'] }} <span class="caret"></span></a>
<ul class="dropdown-menu">
<li role="separator" class="divider"></li>
<li><a href="{{ url_for('upload') }}">上传头像</a></li>
<li><a href="{{ url_for('logout') }}">注销</a></li>
</ul>
</li>
{% else %}
<li><a href="{{ url_for('login') }}">登录</a></li>
<li><a href="{{ url_for('register') }}">注册</a></li>
{% endif %}
</ul>
</div><!-- /.container-fluid -->
</nav>
{% for item in get_flashed_messages() %}
<div class="alert alert-warning alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span
aria-hidden="true">×</span></button>
{{ item }}
</div>
{% endfor %}
{% endblock %}
注册页面:
{% extends 'base.html' %}
{% block title %}注册{% endblock %}
{% block content %}
<div class="container">
<div class="col-lg-8 col-lg-offset-2">
<h1>注册
<small>已有帐号<a href="{{ url_for('login') }}">登录</a></small>
</h1>
</div>
</div>
<form action="{{ url_for('register') }}" method="post">
<div class="form-group">
<label for="exampleInputEmail1">用户名</label>
<input name="username" type="text" class="form-control" id="exampleInputEmail1">
</div>
<div class="form-group">
<label for="exampleInputPassword1">密码</label>
<input name="password" type="password" class="form-control" id="exampleInputPassword1">
</div>
<button type="submit" class="btn btn-default">注册</button>
</form>
{% endblock %}
登录页面:
{% extends 'base.html' %}
{% block title %}
登录页面
{% endblock %}
{% block content %}
<div class="container">
<div class="col-lg-8 col-lg-offset-2">
<h1>登录<small>没有帐号?<a href="{{ url_for('register') }}">注册</a></small></h1>
</div>
</div>
<form action="{{ url_for('login') }}" method="post">
<div class="form-group">
<label for="exampleInputEmail1">用户名</label>
<input name="username" type="text" class="form-control" id="exampleInputEmail1" >
</div>
<div class="form-group">
<label for="exampleInputPassword1">密码</label>
<input name="password" type="password" class="form-control" id="exampleInputPassword1" >
</div>
<div class="checkbox">
<label>
<input type="checkbox"> 记住密码
</label>
</div>
<button type="submit" class="btn btn-default">登录</button>
</form>
{% endblock %}
邮件页面:
注册:
<h1>{{ info.user }}注册成功</h1>
登录:
<h1>主机名:{{ info.host }},IP:{{ info.addr }}在{{ info.log_time }}时间登录{{ info.user }}用户</h1>