作业(flask-登录注册时发送邮件)

业务逻辑:
定义发送邮件函数:
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">&times;</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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值