您现在的位置是: 网站首页 >Flask >Flask搭建微电影视频网站 Flask
【Flask微电影】24.前台会员中心,会员注册登录退出
admin2018年11月12日 21:49 【Flask | Html | Python 】 1440人已围观
Flask搭建微电影视频网站简介 利用Flask搭建微电影视频网站 Github地址:https://github.com/xyliurui/FlaskMovie
## 会员中心 ### 会员注册 #### 创建会员注册表单 ```python from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField, TextAreaField, SelectField, FileField, SelectMultipleField from wtforms.validators import DataRequired, ValidationError, EqualTo, Email, Regexp from app.models import User class RegisterForm(FlaskForm): name = StringField( label='昵称', validators=[ DataRequired('请输入昵称!') ], description='昵称', render_kw={ 'class': "form-control input-lg", 'placeholder': "请输入昵称", 'required': "required", 'autofocus': "autofocus" } ) email = StringField( label='邮箱', validators=[ DataRequired('请输入邮箱!'), Email('邮箱格式不正确') ], description='邮箱', render_kw={ 'class': "form-control input-lg", 'placeholder': "请输入邮箱", 'required': "required", 'autofocus': "autofocus" } ) phone = StringField( label='手机', validators=[ DataRequired('请输入手机!'), Regexp('^1[3|4|5|6|7|8][0-9]\d{4,8}$', message='手机格式不正确') ], description='手机', render_kw={ 'class': "form-control input-lg", 'placeholder': "请输入手机", 'required': "required", 'autofocus': "autofocus" } ) pwd = PasswordField( label='密码', validators=[ DataRequired('请输入密码!') ], description='密码', render_kw={ 'class': "form-control input-lg", 'placeholder': "请输入密码", 'required': "required" } ) repwd = PasswordField( label='重复密码', validators=[ DataRequired('请输入重复密码!'), EqualTo('pwd', message='两次密码不一致') ], description='重复密码', render_kw={ 'class': "form-control input-lg", 'placeholder': "请输入重复密码", 'required': "required" } ) submit = SubmitField( label='注册', render_kw={ 'class': "btn btn-lg btn-success btn-block" } ) def validate_name(self, field): name = field.data num = User.query.filter_by(name=name).count() if num == 1: raise ValidationError('昵称已经存在,请重新输入') def validate_email(self, field): email = field.data num = User.query.filter_by(email=email).count() if num == 1: raise ValidationError('邮箱已经存在,请重新输入') def validate_phone(self, field): phone = field.data num = User.query.filter_by(phone=phone).count() if num == 1: raise ValidationError('手机号已经存在,请重新输入') ``` #### 修改register会员注册视图 允许`get`和`post`方法 ```python from . import home from flask import render_template, redirect, url_for, flash from .forms import RegisterForm from app.models import User from werkzeug.security import generate_password_hash from app import db import uuid @home.route('/register/', methods=['GET', 'POST']) def register(): form = RegisterForm() if form.validate_on_submit(): data = form.data user = User( name=data['name'], pwd=generate_password_hash(data['pwd']), email=data['email'], phone=data['phone'], uuid=uuid.uuid4().hex ) db.session.add(user) db.session.commit() flash('注册成功', category='ok') return redirect(url_for('home.register')) return render_template('home/register.html', form=form) ``` #### 修改register.html会员注册模板 ```html <div class="panel-body"> {% with msgs = get_flashed_messages(category_filter=['ok']) %} {% if msgs %} {% for msg in msgs %} <p>{{ msg }}</p> {% endfor %} {% endif %} {% endwith %} <form role="form" method="post"> <fieldset> <div class="form-group"> <label for="input_name"><span class="glyphicon glyphicon-user"></span> {{ form.name.label }}</label> {{ form.name }} </div> {% for err in form.name.errors %} <div class="col-md-12" style="color: red">{{ err }}</div> {% endfor %} <div class="form-group"> <label for="input_email"><span class="glyphicon glyphicon-envelope"></span> {{ form.email.label }}</label> {{ form.email }} </div> {% for err in form.email.errors %} <div class="col-md-12" style="color: red">{{ err }}</div> {% endfor %} <div class="form-group"> <label for="input_phone"><span class="glyphicon glyphicon-phone"></span> {{ form.phone.label }}</label> {{ form.phone }} </div> {% for err in form.phone.errors %} <div class="col-md-12" style="color: red">{{ err }}</div> {% endfor %} <div class="form-group"> <label for="input_password"><span class="glyphicon glyphicon-lock"></span> {{ form.pwd.label }}</label> {{ form.pwd }} </div> {% for err in form.pwd.errors %} <div class="col-md-12" style="color: red">{{ err }}</div> {% endfor %} <div class="form-group"> <label for="input_repassword"><span class="glyphicon glyphicon-lock"></span> {{ form.repwd.label }}</label> {{ form.repwd }} </div> {% for err in form.repwd.errors %} <div class="col-md-12" style="color: red">{{ err }}</div> {% endfor %} {{ form.csrf_token }} {{ form.submit }} </fieldset> </form> </div> ``` ![BLOG_20181112_215108_16](/media/blog/images/2018/11/BLOG_20181112_215108_16.png "博客图集BLOG_20181112_215108_16.png") ![BLOG_20181112_215115_60](/media/blog/images/2018/11/BLOG_20181112_215115_60.png "博客图集BLOG_20181112_215115_60.png") ### 会员登录 #### 创建会员登录表单 ```python class LoginFrom(FlaskForm): """会员登录表单""" name = StringField( label='账号', validators=[ DataRequired('请输入账号!') ], description='账号', render_kw={ 'class': "form-control input-lg", 'placeholder': "请输入账号", 'required': "required" } ) pwd = PasswordField( label='密码', validators=[ DataRequired('请输入密码!') ], description='密码', render_kw={ 'class': "form-control input-lg", 'placeholder': "请输入密码", 'required': "required", 'autofocus': 'autofocus' } ) submit = SubmitField( label='登录', render_kw={ 'class': "btn btn-lg btn-success btn-block" } ) def validate_name(self, field): """从Admin数据库中,检测账号是否存在,如果不存在则在account.errors中添加错误信息""" account = field.data num = User.query.filter_by(name=account).count() if num == 0: raise ValidationError('账号不存在') ``` #### 修改login会员登录视图 ```python from flask import render_template, redirect, url_for, flash, session, request from .forms import RegisterForm, LoginFrom from app.models import User, UserLog @home.route('/login/', methods=['GET', 'POST']) def login(): form = LoginFrom() if form.validate_on_submit(): data = form.data user = User.query.filter_by(name=data['name']).first() if not user.check_pwd(data['pwd']): flash('密码错误', category='err') return redirect(url_for('home.login')) session['login_user'] = user.name session['login_user_id'] = user.id userlog = UserLog( user_id=user.id, ip=request.remote_addr ) db.session.add(userlog) db.session.commit() return redirect(url_for('home.user')) return render_template('home/login.html', form=form) ``` #### 创建alert_info.html通用flash模板 在**templates/home/**文件夹下创建 ```html {% with msgs = get_flashed_messages(category_filter=['ok']) %} {% if msgs %} {% for msg in msgs %} <p>{{ msg }}</p> {% endfor %} {% endif %} {% endwith %} {% with msgs = get_flashed_messages(category_filter=['err']) %} {% if msgs %} {% for msg in msgs %} <p>{{ msg }}</p> {% endfor %} {% endif %} {% endwith %} ``` #### 修改login.html会员登录模板 ```html {% include 'home/alert_info.html' %} <form role="form" method="post"> <fieldset> <div class="form-group"> <label for="input_contact"><span class="glyphicon glyphicon-user"></span> {{ form.name.label }}</label> {{ form.name }} {% for err in form.name.errors %} <div class="col-md-12" style="color: red">{{ err }}</div> {% endfor %} </div> <div class="col-md-12" id="error_contact"></div> <div class="form-group"> <label for="input_password"><span class="glyphicon glyphicon-lock"></span> {{ form.pwd.label }}</label> {{ form.pwd }} {% for err in form.pwd.errors %} <div class="col-md-12" style="color: red">{{ err }}</div> {% endfor %} </div> {{ form.csrf_token }} {{ form.submit }} </fieldset> </form> ``` ![BLOG_20181112_215145_47](/media/blog/images/2018/11/BLOG_20181112_215145_47.png "博客图集BLOG_20181112_215145_47.png") ### 会员退出 #### 修改logout会员退出视图 ```python @home.route('/logout/') def logout(): session.pop('login_user', None) session.pop('login_user_id', None) return redirect(url_for('home.login')) ```
很赞哦! (0)
相关文章
文章交流
- emoji
当前用户
未登录,点击 登录专题目录
- 【Flask微电影】01.环境搭建项目目录分析
- 【Flask微电影】02.使用蓝图构建项目目录
- 【Flask微电影】03.安装mysql数据库及配置
- 【Flask微电影】04.定义数据模型,生成数据表和初始用户
- 【Flask微电影】05.搭建前台页面-会员登录注册和会员中心
- 【Flask微电影】06.搭建前台页面-电影列表、搜索播放页面
- 【Flask微电影】07.搭建后台页面-后台登陆、后台主页页面
- 【Flask微电影】08.搭建后台页面-密码修改、主页控制面板
- 【Flask微电影】09.搭建后台页面-标签管理、电影管理、预告管理
- 【Flask微电影】10.搭建后台页面-会员管理、评论管理
- 【Flask微电影】11.搭建后台页面-收藏管理、日志管理
- 【Flask微电影】12.搭建后台页面-权限管理、角色管理、管理员管理
- 【Flask微电影】13.管理员登录、退出、装饰器进行访问控制
- 【Flask微电影】14.电影标签管理:增删查改
- 【Flask微电影】15.电影内容管理:增删查改
- 【Flask微电影】16.电影预告管理:增删查改
- 【Flask微电影】17.网站会员管理:查看会员和删除
- 【Flask微电影】18.电影评论管理:评论列表和删除
- 【Flask微电影】19.用户收藏电影:收藏列表和删除
- 【Flask微电影】20.会员修改密码,表单下拉列表同步数据库
- 【Flask微电影】21.基于角色访问控制-权限管理:增删查改
- 【Flask微电影】22.基于角色访问控制-角色管理:增删查改
- 【Flask微电影】23.基于角色访问控制-管理员管理和访问权限控制
- 【Flask微电影】24.前台会员中心,会员注册登录退出
- 【Flask微电影】25.会员中心登录要求,会员资料和密码修改
- 【Flask微电影】26.电影会员评论、会员登录日志、会员收藏列表
- 【Flask微电影】27.电影页面上映轮播预告,搜索、标签筛选列表
- 【Flask微电影】28.电影播放详情,评论,显示评论列表
- 【Flask微电影】29.电影收藏功能,增加电影播放弹幕
- 【Flask微电影】30.项目完成检查,nginx部署网站