需要flask+mysql实现用户注册和登陆效果页面如何实现,flaskmysql,首先,请不要用任何ORM
需要flask+mysql实现用户注册和登陆效果页面如何实现,flaskmysql,首先,请不要用任何ORM
首先,请不要用任何ORM(当然SQLAlchemy,Flask-SQLAlchemy也不要用)
初学flask,于是参照http://dormousehole.readthedocs.org/en/latest/tutorial/introduction.ht...
实际用到的关键代码在这里:https://github.com/mitsuhiko/flask/blob/0.10.1/examples/flaskr/flaskr....
发现网上都是用的sqlite3,或者就是mysql+Flask-SQLAlchemy之类的。
然后很痛苦,本来一个连flask+mysql做用户注册和登陆的效果都不会实现的人,怎么可能轻易看的懂flask+mysql+mysql+Flask-SQLAlchemy的呢。
问了群里好多人,都说用mysql跟sqlite3是一样的,可是我发现多少是有些区别,至少自己搞了一周还是没搞定,不知从何弄起,感觉好痛苦。
可否有大神帮忙弄一个成功的,代码分享下。不胜感激啊!
最好是先一份flask+mysql,再来一份flask+mysql+Flask-SQLAlchemy什么的,便于比较学习。先说声谢谢了
不是有教程么?http://docs.jinkan.org/docs/f...
一个简单的用户注册和登录的页面,就两个部分。
总之如果你认真跟着官方的教程走过一遍。只是完成用户登录和注册的功能都不难的。虽然这些知识点都不烂,但是覆盖范围还比较广泛。数据库,前端的html,后端的程序框架,你对其中一项不太了解都会让你有种无法下手的感觉。
好吧。丢一段验证登录代码上来,因为flask的路由是通过绑定一个个函数来实现的,如果你要在给每个路由都添加一段验证登录的代码还是蛮麻烦的,不过通过装饰器这个功能实现起来还是蛮方便的
例子
from functools import wrapsdef 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')@authorizedef home(**kwds): username = kwds['user'] return render_template('index.html' ,username=username) #加密存储密码import osimport hashlibdef 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'))
python和mysql连接的方式有很多吧?连接上了,不用orm,直接sql不也行么?
不用现成的ORM的话,可以自己学着写一个撒。。自己写的话可以参考下廖神的编写ORM
SQL会写吧?
如果这都看不懂,就先不要折腾了,复习下基础,磨刀不误砍柴工.
pythonimport os, sys, stringimport MySQLdb# 连接数据库 try: conn = MySQLdb.connect(host='localhost',user='root',passwd='xxxx',db='test1')except Exception, e: print e sys.exit()# 获取cursor对象来进行操作cursor = conn.cursor()# 创建表sql = "create table if not exists test1(name varchar(128) primary key, age int(4))"cursor.execute(sql)# 插入数据sql = "insert into test1(name, age) values ('%s', %d)" % ("zhaowei", 23)try: cursor.execute(sql)except Exception, e: print esql = "insert into test1(name, age) values ('%s', %d)" % ("张三", 21)try: cursor.execute(sql)except Exception, e: print e# 插入多条sql = "insert into test1(name, age) values (%s, %s)"val = (("李四", 24), ("王五", 25), ("洪六", 26))try: cursor.executemany(sql, val)except Exception, e: print e#查询出数据sql = "select * from test1"cursor.execute(sql)alldata = cursor.fetchall()# 如果有数据返回,就循环输出, alldata是有个二维的列表if alldata: for rec in alldata: print rec[0], rec[1]cursor.close()conn.close()
可以参考Flask的官方例子: minitwit, 不过数据库用的是 sqlite
编橙之家文章,
相关内容
- 请问python SQLAlchemy中flush()、commit()区别是什么,sqlalch
- MAC OS中修改 python环境变量到底应该修改哪个文件?,
- 请教Unity3D中的IronPython问题,unity3dironpython,我想用Iron
- 抓取需要选择日期才有结果的ajax网站需要怎么解决,选
- 自动检测当前运行环境版本的python方法是什么,运行环
- Windows下Python解决乱码问题应该怎么做,python乱码,刚接
- 用python完成依据列表中的元素画条形码怎么写源码,
- jinja2对内容进行替换时排除大括号内容如何操作,jin
- Python字典查找value中包含指定字符串key如何实现,pyth
- python爬虫运行一段时间后,返回403 forbidden原因是什么,
评论关闭