zoukankan      html  css  js  c++  java
  • Flask框架(2)--编写简单的用户注册--登录场景

    为了更好的理解web前后端的工作业务逻辑:本笔记记录用flask框架编写的一个最初级的代码实现简单的用户注册,登录场景:

    初次进入首页,提示--游客,欢迎参观,有登录和注册选项,

     

    登录成功后的用户,会显示欢迎(比如用admin用户登录):

     页面代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>首页</title>
    </head>
    <body>
    {% if session.name  %}
        <h3>您好,欢迎{{ session.name }}!</h3>
    {% else %}
        <h3>游客,欢迎参观<br><a href="login">请登录</a><br><a href="signin">请注册</a></h3>
    {% endif %}
    </body>
    </html>

    点击登录进入登录页面

    填写错误的用户名或密码会有错误提示

    页面代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>login</title>
    </head>
    <body>
    <form action="/login" method="POST">
        <table>
            <tr>
                <th colspan="2">用户登录</th>
            </tr>
            <tr>
                <th>用户名</th>
                <td>
                    <input name="username" type="text" value="">
                </td>
            </tr>
            <tr>
                <th>密码</th>
                <td>
                    <input name="passwd" type="text" value="">
                </td>
            </tr>
            <tr>
                <th colspan="2">
                    <input name="login" type="submit" value="登录">
                </th>
            </tr>
             <tr>
                <th colspan="2">
                    没有账号点击<a href="signin">注册</a>
                </th>
            </tr>
            没有账号点击<a href="signin">注册</a>
        </table>
    {{ msg }}
    </form>
    </body>
    </html>

    没有账号可点击注册进入注册页面

     注册信息输入不完整会有相关提示:

    页面代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>注册</title>
    </head>
    <body>
    <form action="/signin" method="POST">
        <table>
            <tr>
                <th colspan="2">用户注册</th>
            </tr>
            <tr>
                <th>用户名</th>
                <td>
                    <input name="username" type="text" value="">
                </td>
            </tr>
            <tr>
                <th>密码</th>
                <td>
                    <input name="passwd" type="text" value="">
                </td>
            </tr>
            <tr>
                <th>确认密码</th>
                <td>
                    <input name="passwd1" type="text" value="">
                </td>
            </tr>
            <tr>
                <th colspan="2">
                    <input name="login" type="submit" value="注册">
                </th>
            </tr>
        </table>
    
    {{ msg }}
    </form>
    
    </body>
    </html>

    注册成功后会跳转至注册成功页面,点击立即登录可跳转至登录页面:

    框架代码如下:

    # -*- coding: utf-8 -*-
    # @Time     : 2019/4/28 20:39
    # @Author   : lc
    
    from flask import Flask, render_template, request, session, redirect, url_for
    from Flask2.sqlite import sqlite_insert, sqlite_select
    import sqlite3  # 引入数据库
    
    app = Flask(__name__)  # 创建一个Flask实例
    app.secret_key = 'abcde11ef'  # 设置session密钥
    
    '''根路由支持POST和GET请求,进入index页面'''
    @app.route('/', methods=['GET', 'POST'])
    def hello_world():
        return render_template('index.html')
    
    '''注册支持POST和GET请求,进入signin页面,合法的注册数据写入数据库'''
    @app.route('/signin', methods=['GET', 'POST'])
    def signin():
        method = request.method  # 获取请求方式
        if method == 'GET':
            return render_template('signin.html')
        else:
            user_name = request.form.get('username')
            password = request.form.get('passwd')
            password1 = request.form.get('passwd1')
            if user_name and password and password1:  # 判断必填项
                if password == password1:
                    sqlite_insert(user_name, password)  # 实例化数据库插入方法
                    succ = "注册成功"
                    return render_template('signin_success.html', msg=succ)
                else:
                    err = "登录失败,两次密码输入不一致"
                    # 返回HTML可以添加模板语言,可以放在body里面用{{}}引入
                    return render_template('signin.html', msg=err)
            else:
                err = "请输入完整的注册信息"
                return render_template('signin.html', msg=err)  #
    
    '''登录支持POST和GET请求,进入login页面,合法发起请求后查询数据库进行数据匹配'''
    @app.route('/login', methods=['GET', 'POST'])
    def login():
        method = request.method  # 获取请求方式
        if method == 'GET':
            return render_template('login.html')
        else:
            username = request.form.get('username')
            password = request.form.get('passwd')
            result = sqlite_select(username, password)  # 实例化数据库查询方法
            print(result)
            if result:
                if username == result[1] and password == result[2]:
                    session['name'] = result[1]  # 设置session值
                    return render_template('index.html')
            else:
                err = "登录失败,用户名或密码错误"
                # 返回HTML可以添加模板语言,可以放在body里面用{{}}引入
                return render_template('login.html', msg=err)
    
    
    
    if __name__ == '__main__':
        app.run()

    ps:用户注册后的密码会加密后再存入数据库,可调用以下方法对密码进行加密

    import hashlib
    def hash_code(pwd):
        md5=hashlib.md5() # 获取MD5对象
        md5.update(pwd.encode('utf-8')) #将传入的pwd编码后,更新MD5的状态
        return md5.hexdigest() #返回十六进制的MD5码
    if __name__ == '__main__':
        print(hash_code('123456'))

    # 输出结果:e10adc3949ba59abbe56e057f20f883e

    但行好事,莫问前程
  • 相关阅读:
    Android的selector,背景选择器
    JAVA静态和非静态内部类
    Android应用资源--之属性(Attribute)资源
    contentprovider的学习实例总结
    转:Android 2.3 代码混淆proguard技术介绍
    忘掉旋转,利用2-3-4树,学习红黑树
    ios 定位获取当前位置信息
    地图相关
    mac下,svn配置
    NimBus一个好的开发框架
  • 原文地址:https://www.cnblogs.com/mingfan/p/10789146.html
Copyright © 2011-2022 走看看