python实现可注册登录查询修改的网站

python实现可注册登录查询修改的网站

使用Flask+html

pip 引入Flask库,使用数据库管理用户信息,密码哈希加密后存储,可向邮箱发送验证码。
这里不单独出示所有html代码,仅贴index以作参考。

main.py

#!/usr/bin/python3.8
# -*- coding: UTF-8 -*-
#powered by 辞清明S-joker
#搭建时间:2019/11/20 —— 2019/12/2


#该网站利用python-flask搭建
#以下导入模块,实现数据库操作,网站搭建,页面渲染,前端获取数据,哈希加密,邮件发送,随机码,追踪错误
import sqlite3
from flask import Flask
from flask import render_template
from flask import request
from werkzeug.security import generate_password_hash,check_password_hash
from flask_mail import Mail,Message
import random
import traceback

#网站搭建
app = Flask(__name__)

#邮箱搭建
app.config['MAIL_SERVER'] = 'smtp.qq.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = "********@qq.com"#这里填发送端邮箱号
app.config['MAIL_PASSWORD'] = "*********"#这里是邮箱授权码,不知道怎么搞的同学可以自己去查,论坛都有详细指导
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True

mail = Mail(app)

#以下实现页面渲染,不同页面跳转(与html搭配使用)
@app.route('/')
def index():
    return render_template('index.html')

@app.route('/login')
def login():
    return render_template('login.html')

@app.route('/email')
def regist():
    return render_template('email.html')

@app.route('/update')
def update():
    return render_template('update.html')

@app.route('/updatepwd')
def updatepwd():
    return render_template('updatepwd.html')

@app.route('/updatenick')
def updatenick():
    return render_template('updatenick.html')

@app.route('/delete')
def delete():
    return render_template('delete.html')
 
def Response_headers(content):
    resp = Response(content)
    resp.headers['Access-Control-Allow-Origin'] = '*'
    return resp


#邮箱即为账号,向邮箱发送验证码,验证成功才能注册
@app.route('/emailuser')
def getEmailRequest():
    #接收邮箱,作为账号,这里仅支持qq邮箱
    user_id = request.args.get('user')

    #生成4位验证码
    str1 = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'

    code=''
    for i in range(4):
        num = random.randint(0,len(str1)-1)
        code += str1[num]

    #向邮箱发送验证码
    message = Message(subject='gsp的友情验证码',sender="2857490843@qq.com",recipients=['%s@qq.com'% user_id],body='你的验证码:%s'%code)
    
    #缓存验证码,这里使用的是数据库里另一表单
    try:
        mail.send(message)
        db = sqlite3.connect("test.db")
        cursor = db.cursor()

        sql = "INSERT INTO email(account,code) VALUES ('%s', '%s')" % (
        user_id,code)
        try:
        
            cursor.execute(sql)
            db.commit()
            #验证码发送完毕,跳转到注册页面
            return render_template('regist.html')

        except:
        
            traceback.print_exc()
            db.rollback()
            return '验证码缓存失败'

        db.close()
    
    except Exception as e:
        print(e)
        return '发送失败'

#注册功能
@app.route('/registuser')
def getRigistRequest():

    #接收用户注册信息和验证码
    user_id = request.args.get('user')
    user_pwd = request.args.get('password')
    user_nick = request.args.get('nickname')
    mail_code = request.args.get('code')

    #对密码进行哈希加密
    user_pwd_hash = generate_password_hash(user_pwd)

    #验证验证码
    db = sqlite3.connect("test.db")
    cursor = db.cursor()
    sql1 = "select * from email where account='%s' and code='%s'" %(user_id,mail_code)

    sql2 = "INSERT INTO user(account, password, nickname) VALUES ('%s', '%s', '%s')" % (
        user_id, user_pwd_hash, user_nick)
    try:
        
        cursor.execute(sql1)
        results1 = cursor.fetchall()
        if len(results1) == 1:
            
            #验证成功后,讲用户信息存入数据库
            try:
                cursor.execute(sql2)
                
                #删除已经使用过的验证码
                cursor.execute("delete from email where account='%s' " %(user_id))
                db.commit()
                #注册完毕,自动跳转至登录界面
                return render_template('login.html')
            except:
                traceback.print_exc()
                db.rollback()
                return '注册失败'
        else:
            return '验证码不正确'
                
    except:
        
        traceback.print_exc()
        db.rollback()
        return '验证失败'

    db.close()
 
#登录功能
@app.route('/loginuser')
def getLoginRequest():

    db = sqlite3.connect("test.db")
  
    cursor = db.cursor()
   
    user_id = request.args.get('user')
    user_pwd = request.args.get('password')

    #对数据库里的账户(邮箱)检索
    sql = "select * from user where account='%s'" %(user_id)

    try:
    
        cursor.execute(sql)
            
        results = cursor.fetchall()
        
        if len(results) == 1:
            
            #检索到邮箱后,对存储的密文和用户输入的密码对比
            for row in results:
                i =check_password_hash(row[2],user_pwd)
                if i:
                    user_nick= row[3]
                    #若邮箱和密码正确,登陆成功,自动跳转到用户信息页面
                    return render_template('information.html',user_id=user_id,user_nick=user_nick)
                else:
                    return '密码不正确'
        else:
            return '邮箱不存在'

        db.commit()
    except:
       
        traceback.print_exc()
        db.rollback()
        return '登陆失败'
    
    db.close()


#网站设计为:只有登录后才能修改信息
#修改密码
@app.route('/updatepwduser')
def getUpdatePwdRequest():

    db = sqlite3.connect("test.db")
  
    cursor = db.cursor()
   
    user_id = request.args.get('user')
    #输入新密码
    user_pwd_new = request.args.get('password')

    user_pwd_hash = generate_password_hash(user_pwd_new)

    #对数据库进行修改
    sql = "update user set password='%s' where account='%s' " %(user_pwd_hash,user_id)

    try:
    
        cursor.execute(sql)
        db.commit()
        return '密码修改成功'
    except:
       
        traceback.print_exc()
        db.rollback()
        return '修改失败'
    
    db.close()

#修改昵称
@app.route('/updatenickuser')
def getUpdateNickRequest():

    db = sqlite3.connect("test.db")
  
    cursor = db.cursor()
   
    user_id = request.args.get('user')
    user_nick_new = request.args.get('nickname')
    print(user_nick_new)
    
    sql = "update user set nickname='%s' where account='%s' " %(user_nick_new,user_id)

    try:
    
        cursor.execute(sql)
        db.commit()
        #昵称修改成功后,自动跳转到用户信息页面以供用户查看
        return render_template('information.html',user_id=user_id,user_nick=user_nick_new)
    except:
       
        traceback.print_exc()
        db.rollback()
        return '修改失败'
    
    db.close()

#注销账户
@app.route('/deleteuser')
def getDeleteRequest():
    db = sqlite3.connect("test.db")
  
    cursor = db.cursor()

    #注销之前要确认邮箱和密码
    user_id = request.args.get('user')
    user_pwd = request.args.get('password')
    
    
    sql1 = "select * from user where account='%s'" %(user_id)

    try:
    
        cursor.execute(sql1)
            
        results = cursor.fetchall()
        
        if len(results) == 1:
            
            for row in results:
                i =check_password_hash(row[2],user_pwd)
                #只有密码正确之后可以注销账户
                if i:
                    sql2 = "delete from user where account='%s' " %(user_id)
                    try:
                        cursor.execute(sql2)
                        db.commit()
                        return '注销成功'
                    except:
       
                        traceback.print_exc()
                        db.rollback()
                        return '注销失败'
                        
    
                    
                else:
                    return '密码不正确'
        else:
            return '邮箱不存在'

        db.commit()
    except:
       
        traceback.print_exc()
        db.rollback()
        return '操作失败'
    
    db.close()


if __name__ == '__main__':
    app.run(port=3000, debug = True)

db.py

import sqlite3
conn = sqlite3.connect('test.db')

cursor = conn.cursor()

cursor.execute('create table email(id int(10) primary key, account varchar(50),code varchar(4))')
cursor.close()

conn.close()

index.html

<!DOCTYPE html>
<html>
<center>
	<head>
		<meta charset="UTF-8">
		<title>计算机部撩妹经验分享网站</title>
	</head>
	<body>
		<h1>欢迎来到撩妹分享会!</h1>
		<p>Welcome to 4-304!</p>
		<p>Powered by 辞清明S-joker</p>
		<p></p>
		<p></p>

		<form method="get" action='/login'>
           		<input type="submit" value="登录">
        	</form>
		<p></p>
		<form method="get" action='/email'>
           		<input type="submit" value="注册">
        	</form>
	</body>
</center>
</html>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值