您的位置:

python登录注册改良版,Python注册

本文目录一览:

python设计函数,实现会员注册,要求用户名长度不小于3,密码长度不小于6, 注册时两次输入密码必须相同

def log_in():

username=input("输入用户名(不小于3位)")

if len(username)=3:

password=input("密码(不小于六位)")

if len(password)=6:

pass_1=input("再次输入密码")

if password==pass_1:

print("注册成功")

else:

print("两次输入密码不一致")

log_in()

else:

print("密码长度不符合要求")

log_in()

else:

print("帐号长度不符合要求")

log_in()

log_in()

我在使用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方法。

最后的话

我们现在有了一个全功能的用户登录系统。在下一章中,我们将创建用户的个人资料页,并显示用户的头像。

python模拟用户登录系统,如何两个用户输入各自的密码才能登入?

users = {'root': ['123', False], 'westos': ['456', False]}

while True:

  if all([x[1] for x in users.values()]):

      print('two users login successfully')

      break

  user = input('input user name:\t')

  if not users.get(user):

      print('unexist user')

      continue

  else:

      for i in range(3):

          pw = input('input password:\t')

          if users[user][0] == pw:

              print(f'user `{user}` login successfully')

              users[user][1] = True

              break

用一个字典存储username,pw以及登录状态. 10行判断是否两个人登录状态都为True,如果是,则打印并退出while. 否则13行输入username,如果name不存在,while continue; 如果存在, 进入else,输入密码,密码对则打印并修改状态.超过3次退出for进入while.

Python Django写登陆注册界面,怎么实现分教师端和学生端不同的注册登录

网页链接

这个网页看下,学生和教师登陆这个就学要两个操作系统了,不过部分用相同的数据表,就是做一个出来,另一个就好写了。

如何基于python脚本实现软件的注册功能

基于文本文档(Markdown) 设想好需要的基本需要的表、字段、类型;使用 Rails Migration 随着功能的开发逐步创建表;随着细节功能的开发、需求,逐步增加字段,删除字段,或者调整字段类型;第一个 Release 的时候清理 Migrations 合并成一个;随着后期的改动,逐步增加、修改、删除字段或表。基本上我的所有项目都是这么搞的,这和项目是否复杂无关。所以我前面为什么说思路需要转变。

利用Python模拟注册苹果id

这就涉及到python的内存管理机制了,python里面,所有变量都是对象,数据在内存中占用物理内存,然后指针的头指向不同的对象,就好比两台相同的电脑,编号却不一样,这其实是两个对象;但是也不是所有对象都是这样处理的,为了节省内存,对于小的整数和短的字符串,python在处理的时候会把相同的数据指向不同的对象,但它们的id是一样的。

python登录注册改良版,Python注册

2022-11-21
python通过注册表(Python注册)

2022-11-08
用户注册登录完全指南

2023-05-19
注册登录页面

2023-05-20
java注册登录,java注册登录聊天功能实现

2023-01-09
java登录注册,java登录注册实验报告

2022-11-28
phpmysql登录注册程序,php实现登录注册

2022-11-25
免费注册mysql数据库(mysql注册登录)

2022-11-12
python注册大量用户,python多用户登录

2022-11-20
php登录注册超级管理员,php用户注册登录

2023-01-05
注册登录php代码,php登录注册源码下载

2022-11-21
jspmysql注册代码(jsp登录注册完整代码)

2022-11-15
HTML编写登录注册页面

2023-05-24
java注册,Java注册登录后进入增删改查

2023-01-09
如何注册js网页(js登陆注册)

本文目录一览: 1、JS写简单注册页面的问题 2、js账号怎么用法怎么注册js?。。。。。。。怎么登录js???? 3、当当网上书城注册页面用JavaScript怎么编程 4、编写一个注册网页,求js

2023-12-08
php登陆注册模块,php实现登录注册

2023-01-06
android注册mysql(android注册和登录实现)

2022-11-12
怎样实现登陆和注册php代码(php登录注册代码)

2022-11-13
java登录,java登录注册

2023-01-05
jsp用户登录注册界面代码(jsp实现登录注册)

本文目录一览: 1、编写用户注册于登录的JSP页面的全部程序代码 2、如何用eclipse写登录注册页面的代码 3、JSP编写一个登陆界面 4、求大神写一下jsp的简单的注册界面代码。 编写用户注册于

2023-12-08