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)

訪問成功
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章