python mysql登陆界面吗_python - 怎么用flask+mysql来实现一个简单的用户注册和登陆效果的页面呢?请不要用任何ORM...

小葫芦2017-04-17 14:38:351楼

不是有教程么?http://docs.jinkan.org/docs/f...

一个简单的用户注册和登录的页面,就两个部分。

涉及到数据库,存储用户数据(注册),读出用户数据(登录验证)。搞清楚如何用python连接和操作数据库即可,还有了解sql数据库语句,sqlite和mysql差不多的,看几眼多试几下就了解了。

网站程序,前端如何发送表单(别告诉这你也不清楚?)后端获取用户发送的请求,和数据库中数据验证是否能够登录,然后登录后如何保存用户登录信息,就是使用的cookie,不过在flask中是session(其实session也是cookie,flask把它封装了下,成了加密的cookie)

总之如果你认真跟着官方的教程走过一遍。只是完成用户登录和注册的功能都不难的。虽然这些知识点都不烂,但是覆盖范围还比较广泛。数据库,前端的html,后端的程序框架,你对其中一项不太了解都会让你有种无法下手的感觉。

好吧。丢一段验证登录代码上来,因为flask的路由是通过绑定一个个函数来实现的,如果你要在给每个路由都添加一段验证登录的代码还是蛮麻烦的,不过通过装饰器这个功能实现起来还是蛮方便的

例子

from functools import wraps

def authorize(fn):

@wraps(fn)

def wrapper(*args, **kwds):

user = session.get('logged_in', None)

if user:

return fn(user=user)

else:

return redirect(url_for('signin',next=request.path))

return wrapper

@app.route('/home')

@authorize

def home(**kwds):

username = kwds['user']

return render_template('index.html' ,username=username)

#加密存储密码

import os

import hashlib

def encrypt_password(password, salt=None, encryptlop=30):

if not salt:

salt = os.urandom(16).encode('hex') # length 32

for i in range(encryptlop):

password = hashlib.sha256(password + salt).hexdigest() # length 64

return password, salt

#简单的错误处理

class loginError(Exception):

def __init__(self, value):

self.value = value

def __str__(self):

return repr(self.value)

# 注册登录(下面的代码没有实际运行过)

# 连接数据库我是使用的是 mysql.connector

# http://dev.mysql.com/downloads/connector/python/

# 写法和常用的MySQL-python稍有所不同

# 下面没有连接数据库的代码

@app.route('/register/', methods=['GET','POST'])

def request():

if request.method == 'GET':

return render_template("register.html")

if request.method == 'POST':

# 这里最好需要验证用户输入,我就不写了

u = request.form['username']

p,s = encrypt_password(request.form['password'])

g.db.cursor.execute('INSERT INTO users (name,password,salt) VALUES (%s,%s,%s)',(u,p,s,)

g.db.commit()

return redirect(url_for('signin'))

@app.route('/signin/', methods=['GET','POST'])

def signin():

if request.method == 'GET':

referrer = request.args.get('next','/')

return render_template("login.html",next=referrer)

if request.method == 'POST':

u = request.form['username']

p = request.form['password']

n = request.form['next']

try:

g.db.cursor.execute('SELECT `name` FROM users WHERE name = %s',(u,))

if not g.db.cursor.fetchone():

raise loginError(u'错误的用户名或者密码!')

g.db.cursor.execute('SELECT `salt`,`password` FROM users WHERE name = %s',(u,))

salt,password = g.db.cursor.fetchone()

if encrypt_password(p,salt)[0] == password:

session['logged_in'] = u

return redirect(next)

else:

raise loginError(u'错误的用户名或者密码!')

except loginError as e:

return render_template('login.html', next=next,error=e.value)

@app.route('/signout/', methods=['POST'])

def signout():

session.pop('logged_in', None)

return redirect(url_for('home'))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值