Flask 简单实现注册登陆

flask.jpg
注册登录是web交互最基本的功能,简单介绍下最最基本的注册登录,后面会不断补充完善。

这个功能确实很简单,但一定不能眼高手低。当你真正动手去写的时候会发现很多问题。下面列一下需要注意的点:

  • 数据库路径, 我是Linux下的sqlite3,有三个 /
  • 数据库类怎么定义
  • 路由和 HTTP 请求
  • db.create_all()

代码实现

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#-*-coding:utf-8 -*-
from flask import Flask, url_for, render_template,redirect, request, flash, session
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
db = SQLAlchemy(app)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.sqlite3'
app.config['SECRET_KEY'] = 'random string'

class users(db.Model):
id = db.Column('user_id',db.Integer,primary_key=True)
name = db.Column(db.String(100))
password = db.Column(db.String(100))

def __init__(self, name, password):
self.name = name
self.password = password

@app.route('/', methods=['GET', 'POST'])
@app.route('/login', methods=['GET','POST'])
def login():

if request.method == 'GET':
return render_template('login.html')
else:
user = users.query.filter(users.name == request.form['name']).first()
if user:
if request.form['password'] == user.password:
return render_template('success.html',name=request.form['name'])
else:
return '密码错误'
return render_template('login.html')
else:
return '该用户未注册'
return render_template('login.html')


@app.route('/regist', methods=['GET','POST'])
def regist():
if request.method == 'GET':
return render_template('regist.html')
else:
if not request.form['name'] or not request.form['password']:
return '不能为空 '
else:
user = users(request.form['name'], request.form['password'])
db.session.add(user)
db.session.commit()
return 'successfully!'
return redirect(url_for('login'))


if __name__ == '__main__':
db.create_all()
app.run(debug=True)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Log in</title>
</head>
<body>
<h1>Login</h1>
<form action="" method="post">
<label for="name">name</label><br>
<input type="text" name="name" placeholder="username"><br>
<label for="password">password</label><br>
<input type="password" name="password"><br>
<input type="submit" value="login">
</form>
<h3><a href="{{ url_for('regist') }}">Regist</a></h3>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# regist.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Regist</title>
</head>
<body>
<h1>Regist</h1>
<form action="" method="post">
<label for="name">name</label><br>
<input type="text" name="name" placeholder="username"><br>
<label for="password">password</label><br>
<input type="password" name="password"><br>
<input type="submit" value="Regist">
</form>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
# success.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Success</title>
</head>
<body>
<h1>Successful, {{ name }}</h1>
</body>
</html>
-------------本文结束感谢您的阅读-------------
hao14293 wechat
交流或订阅,请扫描上方微信二维码