Ⅰ 如何python应用flask
注册一个 Bluemix 帐户,在您的 Web 浏览器中访问 并单击右上角的 “Sign-up(注册)”。我们需要一些信息。
等待电子邮件到达,应该只需等待几分钟的时间。电子邮件中应该有一个链接,告知您 “Click here to complete your registration(单击此处完成登记)”,单击该链接。使用您在步骤 1 中创建的用户名和密码进行登录。
单击下面的按钮(这将为您部署应用程序)。
您将看见一个页面,该页面上有一个叫做 “Login(登录)” 的按钮。继续并单击该按钮。
接下来您将转到一个页面,该页面要求您创建一个别名。如果我的邮件地址是 [email protected],那么我会使用 jeffdavis251 作为别名。提示它您不喜欢句点图标(微笑)。
单击 Create(创建)。
您将来到另一个页面,单击 “Continue(继续)”。
现在我们执行的都是一些基本设置,随后我们会来到一个页面,如下所示,只需单击 “Deploy(配置)” 按钮即可。
Ⅱ Python flask 弄好了 访问的时候成这样了 怎么办
没有找到对应的数据库表
如官方文档所说为了创建初始数据库,只需要从交互式 Python shell 中导入db对象并且调用SQLAlchemy.create_all()方法来创建表和数据库:
fromyourapplicationimportdb
db.create_all()
Ⅲ 如何用python,html,数据库建一个登陆管理系统
实现该系统需要具备python和数据库相关知识,python的web框架可采用flask,带有数据库连接接口,通过配置数据库链接以及相关接口进行数据操作,可以登录flask查看相关文档手册,进入w3c学习sql相关开发知识。谢谢
Ⅳ python用flask页面跳转失败
#1.1 shop list
#meshidaren.py 文件下中包含以下代码
@app.route('/shoplist',methods=['GET','POST'])
def show_goods_to_buy():
c = g.db.cursor()#读取数据库
que="select * from goods_to_buy where fridge_id='w111'"
c.execute(que)
items = list(c.fetchall())
return render_template("my_shoplist.html",items=items)#跳到html页面,并传参
Ⅳ python flask框架页面加载问题
你需要在后台添加登录状态判断函数,用session来保存登录状态
Ⅵ python的flask框架中current_user.is_authenticated是如何实现的
应该是从flask-login组件中继承的吧,如果需要了解详细情况,最好读flask-login的源码或文档,以获取更确切的答案。
Ⅶ 我在使用python下的flask框架 但是我要怎么实现sso登录
单点登录跟登录其实差不多,理解了登录也可以搞出单点登录
回顾
在前面的系列章节中,我们创建了一个数据库并且学着用用户和邮件来填充,但是到现在我们还没能够植入到我们的程序中。 两章之前,我们已经看到怎么去创建网络表单并且留下了一个实现完全的登陆表单。
在这篇文章中,我们将基于我门所学的网络表单和数据库来构建并实现我们自己的用户登录系统。教程的最后我们小程序会实现新用户注册,登陆和退出的功能。
为了能跟上这章节,你需要前一章节最后部分,我们留下的微博程序。请确保你的程序已经正确安装和运行。
在前面的章节,我们开始配置我们将要用到的Flask扩展。为了登录系统,我们将使用两个扩展,Flask-Login 和 Flask-OpenID. 配置如下所示 (fileapp\__init__.py):
import os
from flaskext.login import LoginManager
from flaskext.openid import OpenID
from config import basedir
lm = LoginManager()
lm.setup_app(app)
oid = OpenID(app, os.path.join(basedir, 'tmp'))
Flask-OpenID 扩展为了可以存储临时文件,需要一个临时文件夹路径。为此,我们提供了它的位置。
重访我们的用户模型
Flask-Login扩展需要在我们的User类里实现一些方法。除了这些方法以外,类没有被要求实现其它方法。
下面是我们的User类 (fileapp/models.py):
class User(db.Model):
id = db.Column(db.Integer, primary_key = True)
nickname = db.Column(db.String(64), unique = True)
email = db.Column(db.String(120), unique = True)
role = db.Column(db.SmallInteger, default = ROLE_USER)
posts = db.relationship('Post', backref = 'author', lazy = 'dynamic')
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
return unicode(self.id)
def __repr__(self):
return '<User %r>' % (self.name)
is_authenticated方法是一个误导性的名字的方法,通常这个方法应该返回True,除非对象代表一个由于某种原因没有被认证的用户。
is_active方法应该为用户返回True除非用户不是激活的,例如,他们已经被禁了。
is_anonymous方法应该为那些不被获准登录的用户返回True。
最后,get_id方法为用户返回唯一的unicode标识符。我们用数据库层生成唯一的id。
用户加载回调
现在我们通过使用Flask-Login和Flask-OpenID扩展来实现登录系统
首先,我们需要写一个方法从数据库加载到一个用户。这个方法会被Flask-Login使用(fileapp/views.py):
@lm.user_loader
def load_user(id):
return User.query.get(int(id))
记住Flask-Login里的user id一直是unicode类型的,所以在我们把id传递给Flask-SQLAlchemy时,有必要把它转化成integer类型。
登录视图函数
接下来我们要更新登录视图函数(fileapp/views.py):
from flask import render_template, flash, redirect, session, url_for, request, g
from flaskext.login import login_user, logout_user, current_user, login_required
from app import app, db, lm, oid
from forms import LoginForm
from models import User, ROLE_USER, ROLE_ADMIN
@app.route('/login', methods = ['GET', 'POST'])
@oid.loginhandler
def login():
if g.user is not None and g.user.is_authenticated():
return redirect(url_for('index'))
form = LoginForm()
if form.validate_on_submit():
session['remember_me'] = form.remember_me.data
return oid.try_login(form.openid.data, ask_for = ['nickname', 'email'])
return render_template('login.html',
title = 'Sign In',
form = form,
providers = app.config['OPENID_PROVIDERS'])
注意到我们导入了一些新的模块,其中有些后面会用到。
跟上个版本的变化很小。我们给视图函数添加了一个新的装饰器:oid.loginhandler。它告诉Flask-OpenID这是我们的登录视图函数。
在方法体的开头,我们检测是是否用户是已经经过登录认证的,如果是就重定向到index页面。这儿的思路是如果一个用户已经登录了,那么我们不会让它做二次登录。
全局变量g是Flask设置的,在一个request生命周期中,用来存储和共享数据的变量。所以我猜你已经想到了,我们将把已经登录的用户放到g变量里。
我们在调用redirect()时使用的url_for()方法是Flask定义的从给定的view方法获取url。如果你想重定向到index页面,你h很可能使用redirect('/index'),但是我们有很好的理由让Flask为你构造url。
当我们从登录表单得到返回数据,接下来要运行的代码也是新写的。这儿我们做两件事。首先我们保存remember_me的布尔值到Flask的session中,别和Flask-SQLAlchemy的db.session混淆了。我们已经知道在一个request的生命周期中用Flask的g对象来保存和共享数据。沿着这条线路Flask的session提供了更多,更复杂的服务。一旦数据被保存到session中,它将在同一客户端发起的这次请求和这次以后的请求中永存而不会消亡。数据将保持在session中直到被明确的移除。为了做到这些,Flask为每个客户端建立各自的session。
下面的oid.try_login是通过Flask-OpenID来执行用户认证。这个方法有两个参数,web表单提供的openid和OpenID provider提供的我们想要的list数据项。由于我们定义了包含nickname和email的User类,所以我们要从找nickname和email这些项。
基于OpenID的认证是异步的。如果认证成功,Flask-OpenID将调用有由oid.after_login装饰器注册的方法。如果认证失败那么用户会被重定向到login页面。
Flask-OpenID登录回调
这是我们实现的after_login方法(app/views.py)
@oid.after_login
def after_login(resp):
if resp.email is None or resp.email == "":
flash('Invalid login. Please try again.')
redirect(url_for('login'))
user = User.query.filter_by(email = resp.email).first()
if user is None:
nickname = resp.nickname
if nickname is None or nickname == "":
nickname = resp.email.split('@')[0]
user = User(nickname = nickname, email = resp.email, role = ROLE_USER)
db.session.add(user)
db.session.commit()
remember_me = False
if 'remember_me' in session:
remember_me = session['remember_me']
session.pop('remember_me', None)
login_user(user, remember = remember_me)
return redirect(request.args.get('next') or url_for('index'))
传给after_login方法的resp参数包含了OpenID provider返回的一些信息。
第一个if声明仅仅是为了验证。我们要求一个有效的email,所以一个没有没提供的email我们是没法让他登录的。
接下来,我们将根据email查找数据库。如果email没有被找到我们就认为这是一个新的用户,所以我们将在数据库中增加一个新用户,做法就像我们从之前章节学到的一样。注意我们没有处理nickname,因为一些OpenID provider并没有包含这个信息。
做完这些我们将从Flask session中获取remember_me的值,如果它存在,那它是我们之前在login view方法中保存到session中的boolean类型的值。
然后我们调用Flask-Login的login_user方法,来注册这个有效的登录。
最后,在最后一行我们重定向到下一个页面,或者如果在request请求中没有提供下个页面时,我们将重定向到index页面。
跳转到下一页的这个概念很简单。比方说我们需要你登录才能导航到一个页面,但你现在并未登录。在Flask-Login中你可以通过login_required装饰器来限定未登录用户。如果一个用户想连接到一个限定的url,那么他将被自动的重定向到login页面。Flask-Login将保存最初的url作为下一个页面,一旦登录完成我们便跳转到这个页面。
做这个工作Flask-Login需要知道用户当前在那个页面。我们可以在app的初始化组件里配置它(app/__init__.py):
lm = LoginManager()
lm.setup_app(app)
lm.login_view = 'login'
全局变量g.user
如果你注意力很集中,那么你应该记得在login view方法中我们通过检查g.user来判断一个用户是否登录了。为了实现这个我们将使用Flask提供的before_request事件。任何一个被before_request装饰器装饰的方法将会在每次request请求被收到时提前与view方法执行。所以在这儿来设置我们的g.user变量(app/views.py):
@app.before_request
def before_request():
g.user = current_user
这就是它要做的一切,current_user全局变量是被Flask-Login设定的,所以我们只需要把它拷贝到更容易被访问的g变量就OK了。这样,所有的请求都能访问这个登录的用户,甚至于内部的模板。
index视图
在之前的章节中我们用假代码遗留了我们的index视图,因为那个时候我们系统里并没有用户和博客文章。现在我们有用户了,所以,让我们来完成它吧:
@app.route('/')
@app.route('/index')
@login_required
def index():
user = g.user
posts = [
{
'author': { 'nickname': 'John' },
'body': 'Beautiful day in Portland!'
},
{
'author': { 'nickname': 'Susan' },
'body': 'The Avengers movie was so cool!'
}
]
return render_template('index.html',
title = 'Home',
user = user,
posts = posts)
在这个方法中只有两处变动。首先,我们增加了login_required装饰器。这样表明了这个页面只有登录用户才能访问。
另一个改动是把g.user传给了模板,替换了之间的假对象。
现在可以运行我们的应用了。
当我们连接到你将会看到登陆页面。记着如果你通过OpenID登录那么你必须使用你的提供者提供的OpenID URL。你可以下面URL中的任何一个OpenID provider来为你产生一个正确的URL。
作为登录进程的一部分,你将会被重定向到OpenID提供商的网站,你将在那儿认证和授权你共享给我们应用的一些信息(我们只需要email和nickname,放心,不会有任何密码或者其他个人信息被曝光)。
一旦登录完成你将作为已登录用户被带到index页面。
试试勾选remember_me复选框。有了这个选项当你在浏览器关闭应用后重新打开时,你还是已登录状态。
注销登录
我们已经实现了登录,现在是时候来实现注销登录了。
注销登录的方法灰常简单(file app/views.py):
@app.route('/logout')
def logout():
logout_user()
return redirect(url_for('index'))
但我们在模板中还没有注销登录的链接。我们将在base.html中的顶部导航栏添加这个链接(file app/templates/base.html):
<html>
<head>
{% if title %}
<title>{{title}} - microblog</title>
{% else %}
<title>microblog</title>
{% endif %}
</head>
<body>
<div>Microblog:
<a href="{{ url_for('index') }}">Home</a>
{% if g.user.is_authenticated() %}
| <a href="{{ url_for('logout') }}">Logout</a>
{% endif %}
</div>
<hr>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for message in messages %}
<li>{{ message }} </li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
{% block content %}{% endblock %}
</body>
</html>
这是多么多么简单啊,我们只需要检查一下g.user中是否有一个有效的用户,如果有我们就添加注销链接。在我们的模板中我们再一次使用了url_for方法。
最后的话
我们现在有了一个全功能的用户登录系统。在下一章中,我们将创建用户的个人资料页,并显示用户的头像。
Ⅷ python轻量框架--Flask(入门教程)
1.建立: F:Pythonflask文件夹路径
2.安装virtualenv,在此路径下打开命令行窗口输入:
3.新建一个目录,并在里边创建virtualenv环境,在DOS下
如图:
这时你创建的myproject文件夹里面就多了一个venv文件夹:
4.激活虚拟环境
现在命令行前面多了个(venv)表示你在venv环境内
5.在virtualenv里安装Flask
完成。如图:
6.验证是否安装,你可以进入 Python 解释器,尝试导入 Flask:
如果没有报错,那么就安装成功了~如图:
1.在myproject文件夹下打开命令行:
cd app #进入app文件夹
mkdir static
mkdir templates
我们的应用程序包是放置于 app 文件夹中。子文件夹 static 是我们存放静态文件像图片,JS文件以及样式文件。子文件夹 templates 显然是存放模板文件。
2.为我们的 app 包(文件 app/ init .py )创建一个简单的初始化脚本:
上面的脚本简单地创建应用对象,接着导入视图模块,该模块我们暂未编写。
视图是响应来自网页浏览器的请求的处理器。在 Flask 中,视图是编写成 Python 函数。每一个视图函数是映射到一个或多个请求的 URL。
3.让我们编写第一个视图函数(文件 app/views.py ):
其实这个视图是非常简单,它只是返回一个字符串,在客户端的网页浏览器上显示。两个 route 装饰器创建了从网址 / 以及 /index 到这个函数的映射。
4.能够完整工作的 Web 应用程序的最后一步是创建一个脚本,启动我们的应用程序的开发 Web 服务器。让我们称这个脚本为 run.py,并把它置于根目录:
这个脚本简单地从我们的 app 包中导入 app 变量并且调用它的 run 方法来启动服务器。请记住 app 变量中含有我们在之前创建的 Flask 实例。
5.要启动应用程序,您只需运行此脚本(run.py)
如图:
6.在服务器初始化后,它将会监听 5000 端口等待着连接。现在打开你的网页浏览器输入如下 URL:
另外你也可以使用这个 URL:
你看清楚了路由映射是如何工作的吗?第一个 URL 映射到 /,而第二个 URL 映射到 /index。这两个路由都关联到我们的视图函数,因此它们的作用是一样的。如果你输入其它的网址,你将会获得一个错误,因为只有这两个 URL 映射到视图函数。
你可以通过 Ctrl-C 来终止服务器
入门就到这里,比较简单的。
下一章:
python轻量框架--Flask(模板详细版)
Ⅸ 怎么用flask+mysql来实现一个简单的用户注册和登陆效果的页面
用flask+mysql实现用户的注册和登录:
一个简单的用户注册和登录的页面,就两个部分。
涉及到数据库,存储用户数据(注册),读出用户数据(登录验证)。搞清楚如何用python连接和操作数据库即可,还有了解sql数据库语句,sqlite和mysql差不多的,看几眼多试几下就了解了。
网站程序,前端如何发送表单,后端获取用户发送的请求,和数据库中数据验证是否能够登录,然后登录后如何保存用户登录信息,就是使用的cookie,不过在flask中是session(其实session也是cookie,flask把它封装了下,成了加密的cookie)。
举例如下:
(fn):
@wraps(fn)
defwrapper(*args,**kwds):
user=session.get('logged_in',None)
ifuser:
returnfn(user=user)
else:
returnredirect(url_for('signin',next=request.path))
[email protected]('/home')@authorizedefhome(**kwds):
username=kwds['user']
returnrender_template('index.html',username=username)#加密存储密码_password(password,salt=None):
ifnotsalt:
salt=os.urandom(16).encode('hex')#length32
result=password
foriinrange(3):
result=hashlib.sha256(password+salt).hexdigest()[::2]#length32
returnresult,salt#简单的错误处理classloginError(Exception):
def__init__(self,value):
self.value=value
def__str__(self):
returnrepr(self.value)#注册登录(下面的代码没有实际运行过)#连接数据库我是使用的是mysql.connector#http://dev.mysql.com/downloads/connector/python/#写法和常用的MySQL-python稍有所不同#下面没有连接数据库的代码@app.route('/register/',methods=['GET','POST'])defrequest():
ifrequest.method=='GET':
returnrender_template("register.html")
ifrequest.method=='POST':
#这里最好需要验证用户输入,我就不写了
u=request.form['username']
p,s=encrypt_password(request.form['password'])
g.db.cursor.execute('INSERTINTOusers(name,password,salt)VALUES(%s,%s,%s)',(u,p,s,)
g.db.commit()
returnredirect(url_for('signin'))@app.route('/signin/',methods=['GET','POST'])defsignin():
ifrequest.method=='GET':
referrer=request.args.get('next','/')
returnrender_template("login.html",next=referrer)
ifrequest.method=='POST':
u=request.form['username']
p=request.form['password']
n=request.form['next']
try:
g.db.cursor.execute('SELECT`name`FROMusersWHEREname=%s',(u,))
ifnotg.db.cursor.fetchone():
raiseloginError(u'错误的用户名或者密码!')
g.db.cursor.execute('SELECT`salt`,`password`FROMusersWHEREname=%s',(u,))
salt,password=g.db.cursor.fetchone()
ifencrypt_password(p,salt)[0]==password:
session['logged_in']=u
returnredirect(next)
else:
raiseloginError(u'错误的用户名或者密码!')
exceptloginErrorase:
returnrender_template('login.html',next=next,error=e.value)@app.route('/signout/',methods=['POST'])defsignout():
session.pop('logged_in',None)
returnredirect(url_for('home'))
Ⅹ 使用python flask做网页,使用了JS来做一个弹出登陆框,怎么获取到表单数据,
function a(){
vara=$("#username").val();
varb=$("#password").val();
alert("帐号="+a+"<>密码="+b)
}
<input type="button" name="loginbtn" id="loginbtn" class="flatbtn-blu hidemodal" value="登陆" tabindex="3"style="height: 50px;width: 80px;margin-left: 85px;" onclick="a();" >