
正文
python登录函数. python登录程序代码
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
python常用函数
1、complex()
返回一个形如 a+bj 的复数python登录函数.,传入参数分为三种情况python登录函数.:
参数为空时python登录函数.,返回0jpython登录函数.;参数为字符串时python登录函数.,将字符串表达式解释为复数形式并返回;参数为两个整数(a,b)时,返回 a+bj;参数只有一个整数 a 时,虚部 b 默认为0,函数返回 a+0j。
2、dir()
不提供参数时,返回当前本地范围内的名称列表;提供一个参数时,返回该对象包含的全部属性。
3、divmod(a,b)
a -- 代表被除数,整数或浮点数;b -- 代表除数,整数或浮点数;根据 除法运算 计算 a,b 之间的商和余数,函数返回一个元组(p,q) ,p 代表商 a//b ,q 代表余数 a%b。
4、enumerate(iterable,start=0)
iterable -- 一个可迭代对象,列表、元组序列等;start -- 计数索引值,默认初始为0‘该函数返回枚举对象是个迭代器,利用 next() 方法依次返回元素值,每个元素以元组形式存在,包含一个计数元素(起始为 start )和 iterable 中对应的元素值。
相关问答
Q1: 我在使用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 %}
titlemicroblog/title
{% endif %}
/head
body
divMicroblog:
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方法。
最后的话
我们现在有了一个全功能的用户登录系统。在下一章中,我们将创建用户的个人资料页,并显示用户的头像。
Q2: python中怎么实现 必须执行完一个函数才能执行下一个函数
简答来说:通过外部的一个变量
T=fasle
def regist():
""" 注册"""
print “注册”
T=true
def login():
""" 登陆"""
if not T:
print "先注册"
return
print “登陆成功”
def logout():
""" 注销"""
T=fasle
一般的话
注册后都会在数据库中 记录注册信息
登陆的时候 先去到数据库中查看是否有 没有返回空 有的话返回注册信息 ,比如登陆密码 用于下步的密码核对
Q3: Python GUI项目实战(二)主窗体的界面设计与实现
上一节我们介绍了登录窗体的GUI设计与功能实现,用户的账号和密码校验完成后应当跳转到主窗体内容,这一节我们将具体介绍主窗体界面的设计与功能实现!
我们新建一个900x640的窗口,顶部加入图片,下面主体部分创建两个Panedwindow容器,左边添加按钮,右边作为TreeView显示界面;
显示效果:(注意:tkinter在Mac上Panedwindow不支持修改前景色背景色)
在右边的Pannedwindow容器中,添加一个LabelFrame容器作为查询区域,在LabelFrame容器中添加一系列的Label、Entry、Button控件,可以输入学号、姓名、电话、身份证、查询、和显示全部信息:
显示效果:
创建控件、设置对齐方式和每个列的标题
显示效果:
登录成功后,在顶部显示用户姓名和登录时间,用户姓名是怎么来的?是我们在登录窗口输入的,所以这就涉及到了跨窗体数据的传递。这一点非常重要!
登录窗体(登录信息)==主窗体
传递的基本方式:构造函数
在主窗体的构造函数中添加一个接收参数 current_user ,在登录窗体加载新窗体时将参数传递进去;
但是我们登录窗体的登录函数 login() 中用户名的变量 user 是局部变量,函数调用完了之后就变量就没有了,那怎么调用呢?
我们需要在登录窗体的构造函数中定义全局变量:
为了获取用户登录的时间,我们定义一个获取当前时间的方法:
然后在加载主窗体时将参数 self.user 和 self.get_now_time() 作为参数传递进去
另一边,我们在主窗体中,在构造函数中添加全局变量
之后,我们在Top_banner中通过标签将user信息展示出来:
这样主窗口就会显示通过登录窗口登录的用户名(首字母自动转大写)和登录时间:
效果演示:
然后我们在构造方法中把这个函数写入,以实现自动把学生信息写入到all_student_list中
文件中读取到的学生信息存储到all_student_list列表,以此作为参数传入加载TreeView的方法中;
在构造方法中调用该方法,自动把所有学生信息加载到TreeView中
运行效果:
这一节我们实现了主窗体的搭建,从界面的布局到TreeView加载全部学生信息。学生数据如此之多,如果我们想精确查看具体某个学生的信息该怎么做呢?下一讲,我们将实现学生信息的查询功能,敬请期待吧~
Q4: 关于python中几个函数的用法
函数调用
myFun()
# 函数的参数
# 单个参数
# 场景
# 需要动态的调整函数体中某一个处理信息
# 则可以, 以参数的形式接收到相关数据
# 定义
# def 函数名(参数名称):
# 函数体
# 函数体中, 可以直接以变量的方式使用该参数
# 函数的调用
# 函数名(参数值)
# 形参和实参的概念
# 上述函数定义中, "参数名称"即为形参;
# 在调用函数的时候, 传递的真实数据, 即为实参
# 多个参数
# 场景
# 需要动态的调整函数体中多个处理信息时
# 则可以以 逗号 做分割, 接收多个参数
# 定义
# def 函数名(参数名称1, 参数名称2):
# 函数体
# 函数体中, 可以直接以变量的方式使用所有参数
# 调用
# 方式1
# 函数名(参数1, 参数2, 参数3...)
# 形参和实参一一对应
# 方式2
# 函数名(参数名称1=参数1, 参数名称n = 参数n...)
# 可以指明形参名称
# 称为"关键字参数"
# 不需要严格按照顺序
# 不定长参数
# 场景
# 如果函数体中, 需要处理的数据, 不确定长度
# 则可以以不定长参数的方式接收数据
# 方式1
# 定义
# def 函数名(*args):
# 元组
# 函数体
# 函数体中, 可以直接以元组变量的方式使用该参数
# 使用
# 函数名(参数1, 参数2, 参数3...)
关于python登录函数.和python登录程序代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。








