smooth微博客户端(neo4j-flask微博应用程序)
在我们的博客上创建任何内容之前,用户需要能够注册一个帐户。成功后,这将在数据库中创建一个带有:User标签username和password属性的节点,其中密码是经过哈希处理的。
注册页面位于/register,可以接受GET和POST请求。一个GET当访问者在页面上登陆请求将被发送,并且POST当他们填写登记表申请将被发送。在views.py,/register视图由以下定义:
from .models import User, get_todays_recent_posts
from import Flask, request, session, redirect, url_for, render_template, flash
app = Flask(__name__)
@app.route('/register', methods=['GET','POST'])def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if len(username) < 1:
flash('Your username must be at least one character.')
elif len(password) < 5:
flash('Your password must be at least 5 characters.')
elif not User(username).register(password):
flash('A user with that username already exists.')
else:
session['username'] = username
flash('Logged in.')
return redirect(url_for('index'))
return render_template('register.html')
该request变量是一个Flask对象,它解析传入的请求,允许您访问请求的数据。例如,该请求(任一方法GET或POST或任何被允许)被存储在request.method。正如我之前所说,当用户登陆页面时,GET会发送请求。当用户填写注册表单时,将POST发送请求。此视图检查方法类型,如果它是GET请求,它只返回register.html带有Flask的模板,该模板查看模板render_template()的blog/templates目录并传递任何必要的上下文(在本例中为错误消息)。但是,如果是POST请求,则username和password从请求中解析,如果用户的输入满足所有条件,则创建用户。为了更好地理解这一点,我们必须查看User定义的类的一部分models.py。
from py2neo import Graph, Node, Relationship
from passlib.hash import bcrypt
from datetime import datetime
import uuidgraph = Graph()
class User:
def __init__(self, username):
self.username = username
def find(self):
user = graph.find_one("User", "username", self.username)
return user
def register(self, password):
if not self.find():
user = Node("User", username=self.username, password=bcrypt.encrypt(password))
graph.create(user)
return True
else:
return False
User使用username参数初始化类的对象。该User.find()方法使用py2neo的Graph.find_one()方法在数据库中查找带有label :User和给定用户名的节点,返回一个py2neo.Node对象。回想一下,:User基于username属性为节点创建了唯一性约束,因此不会有多个用户具有给定的用户名。该User.register()方法检查具有该用户名的用户是否已存在于数据库中; 如果不是,则通过将py2neo.Node对象传递给Graph.create()方法来创建具有给定用户名和密码的用户。True返回表示注册成功。
最后,为了完全理解注册过程,我们应该看一下register.html模板:
{% extends "layout.html" %}
{% block body %}
<h2>Register</h2>
<form action="{{ url_for('register') }}" method="post">
<dl>
<dt>Username:</dt>
<dd><input type="text" name="username"></dd>
<dt>Password:</dt>
<dd><input type="password" name="password"></dd>
</dl>
<input type="submit" value="Register">
</form>
{% endblock %}
回想一下views.py,该register()方法定义了一个error带有字符串的变量,告诉用户他们做错了什么。传递的变量render_template()称为上下文,并在模板的上下文中可用。因此,可以在相应的模板.html文件中使用双花括号访问它们。如果error不是None,则显示给访问者。
表单向视图发送POST请求,/register原因在于action="{{ url_for('register') }}",url_for()用于访问视图函数中定义的URL的Flask方法。参数to url_for是一个字符串,它指的是处理视图的函数的名称。因为处理视图的函数是named register(def register():),所以我们将字符串“register”传递给url_for函数。
使用输入的名称访问表单的数据; 例如,访问用户键入用户名文本框的字符串,request.form['username']因为输入定义为<input type="text" name="username">。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com