def index():
code = request.args.get("code", "")
#app.logger.debug("code:%s" %code)
#app.logger.debug(request.args)
if g.signin:
return "logged_in"
elif code:
_data = Get_Access_Token(code)
app.logger.debug(_data)
access_token = _data['access_token']
uid = _data['uid']
userData = Get_User_Info(access_token, uid)
app.logger.debug(userData)
#resp = render_template('info.html', userData=userData)
#resp.set_cookie(key="logged_in", value='true', expires=None)
resp = jsonify(userData)
resp.set_cookie(key="logged_in", value='true', expires=None)
return resp
else:
return redirect(url_for("login"))
python类url_for()的实例源码
def index():
code = request.args.get("code", "")
#app.logger.debug("code:%s" %code)
#app.logger.debug(request.args)
if g.signin:
return "logged_in"
elif code:
_data = Get_Access_Token(code)
access_token = _data['access_token']
openid = Get_OpenID(access_token)['openid']
userData = Get_User_Info(access_token, openid)
app.logger.debug(userData)
#resp = render_template('info.html', userData=userData)
#resp.set_cookie(key="logged_in", value='true', expires=None)
resp = jsonify(userData)
resp.set_cookie(key="logged_in", value='true', expires=None)
return resp
else:
return redirect(url_for("login"))
def index():
code = request.args.get("code", "")
#app.logger.debug("code:%s" %code)
#app.logger.debug(request.args)
if g.signin:
return "logged_in"
elif code:
_data = Get_Access_Token(code)
app.logger.debug(_data)
access_token = _data['access_token']
uid = _data['uid']
userData = Get_User_Info(access_token, uid)
app.logger.debug(userData)
#resp = render_template('info.html', userData=userData)
#resp.set_cookie(key="logged_in", value='true', expires=None)
resp = jsonify(userData)
resp.set_cookie(key="logged_in", value='true', expires=None)
return resp
else:
return redirect(url_for("login"))
def login():
if current_user.is_authenticated:
return redirect(url_for('index'))
form = LoginForm()
if not form.validate_on_submit():
status_code = Unauthorized.code if form.is_submitted() else 200
return render_template('login.html',
title='Login',
form=form,
User=User,
password_length={'min': TRACKER_PASSWORD_LENGTH_MIN,
'max': TRACKER_PASSWORD_LENGTH_MAX}), status_code
user = user_assign_new_token(form.user)
user.is_authenticated = True
login_user(user)
return redirect(url_for('index'))
def admin_login_required(method):
def is_admin(user):
if isinstance(user.is_admin, bool):
return user.is_admin
else:
return user.is_admin()
@functools.wraps(method)
def wrapper(*args, **kwargs):
if not current_user.is_authenticated:
flash("This section is for logged in users only.", 'warning')
return redirect(url_for('redberry.home'))
if not hasattr(current_user, 'is_admin'):
flash("Redberry expects your user instance to implement an `is_admin` boolean attribute "
"or an `is_admin()` method.", 'warning')
return redirect(url_for('redberry.home'))
if not is_admin(current_user):
flash("This section is for admin users only.", 'warning')
return redirect(url_for('redberry.home'))
return method(*args, **kwargs)
return wrapper
############
# CMS ROUTES
############
def show_post(slug):
from redberry.models import RedPost
post = RedPost.query.filter_by(slug=slug).first()
if not post:
flash("Post not found!", 'danger')
return redirect(url_for('redberry.home'))
return render_redberry('redberry/post.html', post=post)
def show_category(category_slug):
from redberry.models import RedCategory
category = RedCategory.query.filter_by(slug=category_slug).first()
if not category:
flash("Category not found!", 'danger')
return redirect(url_for('redberry.home'))
return render_redberry('redberry/category.html', category=category)
def new_record(model_name):
from redberry.models import RedCategory, RedPost
from redberry.forms import CategoryForm, PostForm
if model_name == 'category':
form = CategoryForm()
new_record = RedCategory()
elif model_name == 'post':
form = PostForm()
new_record = RedPost()
# Convert category ids into objects for saving in the relationship.
if form.categories.data:
form.categories.data = RedCategory.query.filter(RedCategory.id.in_(form.categories.data)).all()
form.categories.choices = [(c, c.title) for c in RedCategory.sorted()]
else:
form.categories.choices = [(c.id, c.title) for c in RedCategory.sorted()]
if form.validate_on_submit():
form.populate_obj(new_record)
cms.config['db'].session.add(new_record)
cms.config['db'].session.flush()
build_sitemap()
flash("Saved %s %s" % (model_name, new_record.id), 'success')
return redirect(url_for('redberry.admin', model_name=model_name))
return render_template('redberry/admin/form.html', form=form, model_name=model_name)
def dev_login(user_id):
if ENVIRONMENT == 'dev':
login_user(db.session.query(User).get(user_id))
return redirect(url_for('index'))
def logout():
logout_user()
return flask.redirect(flask.url_for('index'))
def index():
bot_links = [
{
'title': 'LINE',
'url': 'https://line.me/R/ti/p/W1MINAEbHE',
'external': True,
},
{
'title': 'Facebook (web)',
'url': 'https://www.facebook.com/pycontwchatbot/',
'external': True,
},
{
'title': 'Facebook (app)',
'url': 'fb://page/299082580532144',
'external': True,
},
]
misc_links = [
{
'title': '???',
'url': url_for('leaderboard'),
'external': False,
},
]
return render_template(
'index.html',
bot_links=bot_links, misc_links=misc_links,
)
def logout():
logout_user()
return redirect(url_for("index"))
################################################################################
################################################################################
# SET UP CONNECTION WITH DATABASES
################################################################################
def teacher_session():
if '/teacher/' in request.path:
if 'credentials' not in flask.session:
return flask.redirect(flask.url_for('index'))
elif not flask.session['is_teacher']:
return flask.redirect(flask.url_for('register'))
def student_session():
if '/student/' in request.path:
if 'credentials' not in flask.session:
return flask.redirect(flask.url_for('index'))
elif not flask.session['is_student']:
return flask.redirect(flask.url_for('register'))
# make sure user is authenticated w/ live session on every request
def manage_session():
# want to go through oauth flow for this route specifically
# not get stuck in redirect loop
if request.path == '/oauth/callback':
return
# allow all users to visit the index page without a session
if request.path == '/' or request.path == '/oauth/logout':
return
# validate that user has valid session
# add the google user info into session
if 'credentials' not in flask.session:
flask.session['redirect'] = request.path
return flask.redirect(flask.url_for('oauth2callback'))
def switch_type():
im = index_model.Index(flask.session['id'])
if request.form['type'] == 'teacher':
if im.is_teacher():
return flask.redirect(flask.url_for('main_teacher'))
else:
return flask.redirect(flask.url_for('register'))
elif request.form['type'] == 'student':
if im.is_student():
return flask.redirect(flask.url_for('main_student'))
else:
return flask.redirect(flask.url_for('register'))
def login():
im = index_model.Index(flask.session['id'])
if im.is_student():
print flask.url_for('main_student')
return flask.redirect(flask.url_for('main_student'))
elif im.is_teacher():
return flask.redirect(flask.url_for('main_teacher'))
else:
return render_template('login.html', not_registered=True)
def remove_class():
tm = teachers_model.Teachers(flask.session['id'])
# show potential courses to remove on get request
if request.method == 'GET':
courses = tm.get_courses()
context = dict(data=courses)
return render_template('remove_class.html', **context)
# remove course by cid
elif request.method == 'POST':
cid = request.form['cid']
tm.remove_course(cid)
return flask.redirect(flask.url_for('main_teacher'))
def oauth2callback():
flow = oauth2client.client.flow_from_clientsecrets(
'client_secrets_oauth.json',
scope=[
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile'],
redirect_uri=flask.url_for('oauth2callback', _external=True))
if 'code' not in flask.request.args:
auth_uri = flow.step1_get_authorize_url()
return flask.redirect(auth_uri)
else:
auth_code = flask.request.args.get('code')
credentials = flow.step2_exchange(auth_code)
flask.session['credentials'] = credentials.to_json()
# use token to get user profile from google oauth api
http_auth = credentials.authorize(httplib2.Http())
userinfo_client = apiclient.discovery.build('oauth2', 'v2', http_auth)
user = userinfo_client.userinfo().v2().me().get().execute()
# TODO only allow columbia.edu emails
# if 'columbia.edu' not in user['email']:
# return flask.redirect(flask.url_for('bademail'))
um = users_model.Users()
flask.session['google_user'] = user
flask.session['id'] = um.get_or_create_user(user)
# now add is_student and is_teacher to flask.session
im = index_model.Index(flask.session['id'])
flask.session['is_student'] = True if im.is_student() else False
flask.session['is_teacher'] = True if im.is_teacher() else False
redirect = flask.session['redirect']
flask.session.pop('redirect', None)
return flask.redirect(redirect)
def logout():
flask.session.clear()
return flask.redirect(flask.url_for('index'))