python实现登录(数据库存储用户资料)

要实现数据库存储用户资料,首先要建立一个数据库文件,并建立对应的表来存储对应的用户资料
我们先建立一个简单的数据库,里面只存储了用户的用户名和密码。
我们用python里自带的sqlite3来建立一个数据库
新建一个python文件:create_sql.py
代码:----------------------------------------------------------------
#coding:utf-8
import sqlite3
#建一个数据库
def create_sql():
    sql = sqlite3.connect("user_data.db")
    sql.execute(
        """create table if not exists
        %s(
        %s integer primary key autoincrement,
        %s varchar(128),
        %s varchar(128))"""
        % ('user',
           'id',
           'name',
           'passworld'))
    sql.close()
    return sql
#user_data.db为数据库文件名
#create table if not exists为建立一个数据库指令,如果文件存在就打开,不存在就创建一个
#%s对应后面的四个参数
# 'user':表名
# 'id':相当于一个索引,autoincrement指定为自动增量
# 'name',用户名
# 'passworld'用户密码
# sql.close()是关闭数据库,每次对数据库进行操作后,都要记得进行关闭操作
create_sql()

  

运行
$python create_sql.py
运行成功后,在当前目录下会生成"user_data.db"文件
就是我们要用到的数据库文件,当然你也可以用sqlite3来生成这个文件
这个数据库现在还不包含任何的用户资料,如果用表格来表达这个数据库大约就是如下
file:user_data.db
table:user
id name passworld

有了数据库,我们就要向数据库增加用户资料
新建一个python
add_data.py
代码:--------------------------------------------------------------------------------
#coding:utf-8
import sqlite3
#数据库增加数据
def add_data():
    sql = sqlite3.connect("user_data.db")
    sql.execute("insert into user(name,passworld) values('python','147258369')")
    sql.commit()
    print "添加成功"
    sql.close()  # 关闭数据库
#sqlite3.connect("user_data.db")要增加一条用户资料,首先要打开数据库文件
#"insert into user(name,passworld) values('python','147258369')"是sqlite3指令
#它表示在表'user'的name对应的列写入一行python,就是用户名,在passworld对应的列写入一行147258369,就是用户密码
#做完这一步之后,对数据库的操作已经完成,但user_data.db这个文件是还没有发生变化的
#sql.commit()提交任务,只有使用了commit()方法后,才会把之前对数据库的操作写入文件中,
# sql.close()是关闭数据库,每次对数据库进行操作后,都要记得进行关闭操作
add_data()

  

这里不用运行这段代码,这里只是为说明如何在数据库中增加数据
这段代码过于简单,如果我们想要自定义输入用户名和密码就只能修改代码内的
values('python','147258369')字段,比较不方便
所以,为了以后方便地对数据库进行增加和查询,在上面的基础上,另外建立一个python
data_operations.py

代码:---------------------------------------------------------------------
#coding:utf-8
import sqlite3
#数据库增加数据
def add_data():
    input_name = str(raw_input("请输入您的用户名:"))
    input_passworld = str(raw_input("请输入您的密码:"))
    sql = sqlite3.connect("user_data.db")
    sql.execute("insert into user(name,passworld) values(?,?)",
                (input_name,input_passworld))
    sql.commit()
    print "添加成功"
    sql.close()
#这里增加了读取两个参数values(?,?)字段里的两个?号,对应了参数input_name,input_passworld

def showalldata():
    sql = sqlite3.connect("user_data.db")
    data=sql.execute("select * from user").fetchall()
    sql.close()
    return data
#"select * from user"为查询user对应的表的所有资料的指令

while 1:
    option= """
1:增加数据
2:查询数据
q:退出
选择您想要的进行的操作:"""
    cho = raw_input(option)
    if cho=='1':
        add_data()
    elif cho=='2':
        showalldata()
    elif cho=='q':
        break
    else:
        "输入错误"
我们现在要做的是实现注册一个新的用户,并用户名只能为唯一
比如,这个假定的数据库已经有一个用户,名为python,当我们新注册用同样的用户名时,会要求重新输入
建立python文件:register.py
代码:--------------------------------------------------------
#coding:utf-8
import sqlite3
#数据库增加数据
def register():
    while 1:
        input_name = str(raw_input("请输入您的用户名:"))
        sql = sqlite3.connect("user_data.db")
        data = sql.execute("select * from user where name='%s'" % input_name).fetchone()
        if not data:
            input_passworld = str(raw_input("请输入您的密码:"))
            sql.execute("insert into user(name,passworld) values(?,?)",
                        (input_name,input_passworld))
            sql.commit()
            print "添加成功"
            sql.close()
            break
        else:
            print "用户已存在"

register()

运行:
$python register.py
请输入您的用户名:python
用户已存在
请输入您的用户名:py
请输入您的密码:147258
添加成功

  

那么,有了数据库,前面的工作只是建立了对应的数据库,更多的对数据库的操作,下一篇博文会更详细地说明
里面也已保存有我们的用户名和密码了,下面我们进行一个简单的登录操作
建立python文件
login.py
代码--------------------------------------------------------------------------
#coding:utf-8
import sqlite3,getpass

def showdate(username):
    sql = sqlite3.connect('user_data.db')
    data = sql.execute("select * from user where name='%s'"% username).fetchone()
    sql.close()
    return data
#("select * from user where username='%s'"% name)这条指令用来查询表user的name字段的对应的数据
#最后返回用户名对应的资料

def val():
    while 1:
        name = raw_input("用户名")#输入用户名
        data = showdate(name)#获取用户名对应的数据库资料
        if data:
            passworld = getpass.getpass("密码")  # 输入密码
            if data[2] == passworld:
                print "登录成功"
                break
            else:
                print"密码错误"
        else:
            print"用户名错误"
#getpass模块可以使输入的字符不可见,在python的shell中可能无效,在终端中和用户登录效果相同,不出现输入字符

val()
print "进入用户操作"

  

$python login.py

这时会提示输入用户名和密码,输入错误将一直循环,直到输入正确用户名和密码。
这当然不是我们要的最终结果,我们还会要加入比如多次输入错误锁定用户,那么就要在数据库中存更多的数据
比如,错误次数字段,是否锁定状态的字段,锁定时间字段(方便一定时间后自动解锁),错误次数字段
当然,我们也可以加入用户地址,电话,邮箱等更多资料,不过这里只为了实现登录的操作,这些旁支也不在这里详述了
posted @ 2017-07-28 14:31  LASHxxxx  阅读(5846)  评论(1编辑  收藏  举报