falsk练习小项目——利用mysql实现登录+注册

本文主要记录利用python的Flask框架和Mysql数据库实现登录+注册功能,

创建项目文件

templates文件夹主要放网页文件
static文件夹下主要放静态文件比如 css、js 、图片等等;
因为在flask框架下默认模板文件是放在templates下的,所以不要把文件名写错了,当然也可以自定义文件夹名的,不过在后面创建对象的时候需要单独加一下,这个后面代码会说的

创建数据库

数据库结构如下图
注意主键不要漏了,不然后面注册的时候出现id重复就麻烦了,当然我们会有异常处理的,如果没有定义主键约束或者唯一约束,异常也就捕获不了了
在这里插入图片描述

下面写数据库管理类

import pymysql
# sql连接、 数据库连接类、数据库操作方法
from pymysql import IntegrityError


class sjk():
    def __init__(self):
        self.opensql()


    def opensql(self):

        '''获取数据库连接'''
        self.conn=pymysql.connect('localhost',user='root',passwd='123456')
        self.conn.select_db('python_flask')
        print("数据库连接成功")
        return self.conn


    def downsql(self):
        global conn
        self.conn.close()
        print("数据库关闭成功")


    def user_inqure(self,id):
        # 查询方法,需要提供id返回密码和姓名数组
        cur=self.conn.cursor()
        sql="select `name`,`password` from `user` where id={0}".format(id)

        cur.execute(sql)

        res=cur.fetchone()

        # 以下处理数据查找不到的问题
        if res==None:

            self.downsql()
            return 0

        else:

            self.downsql()
            cur.close() #

        return res


    def user_add(self,id,password,name):
        cur=self.conn.cursor()
        sql="insert into user (`id`,`password`,`name`)values(%s,%s,%s)" # 最好采用这种方式添加
        try:
            n=cur.execute(sql,(id,password,name))
            self.conn.commit() # 提交事务
            cur.close() # 关闭游标
            self.downsql() #关闭连接
            return n

        except IntegrityError:
            cur.close()# 关闭游标
            self.downsql() # 关闭连接
            return 0

创建主页的HTML文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>主页</title>
</head>
<body background="../static/img/back.jpg" > 
<center><h1>欢迎来到我的世界</h1></center>


<h3><center><a href="{{t1}}">登录</a></center></h3>

<h3><center><a href="{{t2}}">注册</a></center></h3>


</body>
</html>

创建登录页面的额HTML文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body background="../static/img/4.jpg">
<h2><center>登录</center></h2>

    <form action="log" method="post">

        账号:<input type="text" name="id"/><br/>

        &nbsp;码:<input type="password" name="password"/><br/>



        <input type="submit" value="登录"/>
        <input type="reset" value="重置"/>

    </form>
</body>
</html>

创建注册页面的HTML文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册界面</title>

</head>
<body background="../static/img/3.jpg">
<form action="page" method="post" >

    昵称:<input type="text" name="name"><br/>
    账号:<input type="text" name="id"> <br/>
    密码:<input type="password" name="password"><br/>

    <input type="submit" value="提交"><input type="reset" value="重置">

</form>

</body>
</html>

最后是最重要的flask路由和视图函数

from flask import Flask, render_template, url_for, request

import  sql
app = Flask(__name__)

#上面说过,如果自定义的放html文件的文件夹不是templates,就需要像下面这样创建app对象
# app=Flask(__namee__,template=“自定义的文件夹名”)

sjk=sql.sjk()  #创建数据库连接对象


@app.route('/')
def homepage():
    '''主页'''
    return render_template('index.html',t1=url_for('login'),t2=url_for('zhuce'))




@app.route('/log',methods=['POST','GET'])
def do_log():
    '''登录'''
    id=request.form['id']
    password=request.form['password']
    list=sjk.user_inqure(id) # 调用查询

    if list==0:
        return "不存在此用户"

    else:
        if list[1]==password:
            return "恭喜{0}登录成功".format(list[0])

        else:
            return '请检测密码是否输入正确'



@app.route('/123')
def login():
    '''登录页面'''
    return render_template('login.html')


@app.route('/124')
def zhuce():
    '''注册页面'''

    return render_template('zhuce.html')


@app.route('/page',methods=['post','get'])
def page():
    '''注册处理方法'''
    id=request.form['id']
    name=request.form['name']
    password=request.form['password']

    n=sjk.user_add(id,name,password) # 添加到是数据库中

    if n==1:
        return '<h3><center>{0}恭喜注册成功</center></h3>'.format(name)

    else:
        return '<h3><center>{0}很抱歉~注册失败~请换个昵称试试呢</center></h3>'.format(name)





if __name__ == '__main__':
    app.debug=True  # 开启调试模式  注:在生成坏境不能开调试模式,有被攻击的额风险
    app.run()

最后放几张效果图

可能与背景图与读者不同,不过取决于读者自己使用的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

共享给小伙伴访问

只需要将run()里面的host参数指定成0.0.0.0就可以了,然后将你的本地id地址提供给小伙伴,然后小伙伴使用ip地址+端口号5000就能访问了
不过需要关闭本地的防火墙,并且只能是在同一个局域网内才能访问


if __name__ == '__main__':
    app.debug=True  # 开启调试模式
    app.run(host=0.0.0.0)

访问成功
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45795349/article/details/106931753