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

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

要实现数据库存储用户资料,首先要建立一个数据库文件,并建立对应的表来存储对应的用户资料
我们先建立一个简单的数据库,里面只存储了用户的用户名和密码。
我们用python里自带的sqlite3来建立一个数据库
新建一个python文件:create_sql.py
代码:----------------------------------------------------------------

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#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
代码:--------------------------------------------------------------------------------

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#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

代码:---------------------------------------------------------------------

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

#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
代码:--------------------------------------------------------

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

#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
代码--------------------------------------------------------------------------

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

#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

这时会提示输入用户名和密码,输入错误将一直循环,直到输入正确用户名和密码。
这当然不是我们要的最终结果,我们还会要加入比如多次输入错误锁定用户,那么就要在数据库中存更多的数据
比如,错误次数字段,是否锁定状态的字段,锁定时间字段(方便一定时间后自动解锁),错误次数字段
当然,我们也可以加入用户地址,电话,邮箱等更多资料,不过这里只为了实现登录的操作,这些旁支也不在这里详述了
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hbqjzx

你的鼓励将是我分享的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值