smooth微博客户端(neo4j-flask微博应用程序)

smooth微博客户端(neo4j-flask微博应用程序)(1)

在我们的博客上创建任何内容之前,用户需要能够注册一个帐户。成功后,这将在数据库中创建一个带有:User标签usernamepassword属性的节点,其中密码是经过哈希处理的。

注册页面位于/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')

smooth微博客户端(neo4j-flask微博应用程序)(2)

smooth微博客户端(neo4j-flask微博应用程序)(3)

该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

smooth微博客户端(neo4j-flask微博应用程序)(4)

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 %}

smooth微博客户端(neo4j-flask微博应用程序)(5)

回想一下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

    分享
    投诉
    首页