百度自助建站官网,网站建设精准精细快速,国内创意产品网站,网站做外链的好处距离上次发文好久好久了。 先说声抱歉#xff0c;拖更的毛病我会改掉的。 上次我们教大家如何用后台去管理用户和新增文章#xff0c;但始终都是单机操作#xff0c;怎么让你的朋友也来加入你的小站呢#xff1f;今天我们来为我们的网站增添一个新功能#xff0c;实现用户… 距离上次发文好久好久了。 先说声抱歉拖更的毛病我会改掉的。 上次我们教大家如何用后台去管理用户和新增文章但始终都是单机操作怎么让你的朋友也来加入你的小站呢今天我们来为我们的网站增添一个新功能实现用户的注册。 我们来看下之前的页面。 已经有模有样的了。那我们就把用户的注册放在右上角吧。 修改templates/header.html为如下内容。为我们的导航栏添加一个注册按钮。
nav classnavbar navbar-expand-sm navbar-dark bg-darka classnavbar-brand href# stylefont-size: 1.5rem;我的个人博客/adiv classnavbar-collapse collapse idnavbarNavul classnavbar-nav ml-md-autoli classnav-itema classnav-link text-white href#注册/a/li/ul/div
/nav 我们来看下效果。还行吧风格统一。 接着来写下注册的界面。我们在templates文件夹下新建一个文件夹users。接着新建一个register.html文件内容如下
{% extends base.html %}
{% block title %}用户注册
{% endblock %}{% block content %}
{% endblock content %}有了页面但是我们还是得通过flask去渲染这时候就需要再添加一个注册的接口了。 打开app.py添加如下内容
app.route(users/register, methods[GET, POST])
def register():if request.method GET:return render_template(users/register.html)else:pass 当GET请求时我们则渲染注册页面POST请求时则注册用户信息。好啦。接着就是继续完成注册页面的前端部分。
{% extends base.html %}
{% block title %}用户注册
{% endblock %}
{% block content %}div classcontainer col-5 stylemargin-top: 10vhform methodpost classform-horizontal div classform-grouph2 classtext-center 加入我们/h2/divdiv classform-grouplabel forusername classcol-sm-2 text-right styledisplay: inline-block;用户名: /labeldiv classcol-sm-9 styledisplay: inline-block;input typetext nameusername classform-control idusername value required placeholder请输入用户名//div/divdiv classform-grouplabel foremail classcol-sm-2 control-label text-right styledisplay: inline-block;邮箱: /labeldiv classcol-sm-9 styledisplay: inline-block;input typeemail nameemail classform-control idemail value autocompleteoff required placeholder请输入邮箱//div/divdiv classform-grouplabel forpassword classcol-sm-2 control-label text-right styledisplay: inline-block;密码: /labeldiv classcol-sm-9 styledisplay: inline-block;input typepassword namepassword classform-control idpassword value autocompleteoff required placeholder请输入密码//div/divdiv classform-groupdiv classcol-sm-10 stylemargin: 0 auto;button classbtn btn-lg btn-primary btn-block register-btn typesubmit注册/button/div/div/form/div
{% endblock content %}别忘了修改header.html中的跳转链接。
a classnav-link text-white href/users/register注册/a 好了我们来到首页点击注册看下。 不错这是我们要的效果 。接下来我们来把注册的逻辑补上。这里有个问题我们之前定义数据库模型的时候只设计了用户id,用户名并没有邮箱密码这2个 那怎么办呢没错让我们来回顾下往User模型类添加这2个字段。然后做数据库迁移最后再来写我们的注册开干。 打开models.py增加2个字段。
from config import dbclass User(db.Model): # 表名将会是 user自动生成小写处理id db.Column(db.Integer, primary_keyTrue, autoincrementTrue) # 主键name db.Column(db.String(20), nullableFalse) # 用户名# 给这个article模型添加一个author属性关系表User为要连接的表backref为定义反向引用# lazy表示禁止自动查询后面可以直接操作这个对象。只可以用在一对多和多对多关系中不可以用在一对一和多对一中articles db.relationship(Article, backrefdb.backref(user), lazydynamic)password db.Column(db.String(200), nullableFalse)email db.Column(db.String(88), nullableFalse)def __repr__(self):return self.nameclass Article(db.Model):# 也可以自定义表名__tablename__ article# id 主键 自增id db.Column(db.Integer, primary_keyTrue, autoincrementTrue)# 文章标题 非空title db.Column(db.String(100), nullableFalse)# 文章正文 非空content db.Column(db.Text, nullableFalse)# 关联表这里要与相关联的表的类型一致, user.id 表示关联到user表下的id字段author_id db.Column(db.Integer, db.ForeignKey(user.id))接着对模型进行迁移。执行如下命令将模型生成迁移文件。
python manage.py db migrate 执行完命令后你可以在migrations/versions下看到多了一个迁移文件。 这样就完成了吗看到这里回忆一下还需要怎么操作emmmm。这时候你的数据库里是还没有创建表的。必须执行下面的语句。
python manage.py db upgrade 好啦是时候写下逻辑了。打开app.py更改代码如下 app.route(/users/register, methods[GET, POST])
def register():error None # 错误if request.method POST: # 只有POST请求才是注册用户user models.User() # 实例化User类后边可以拿来增删改查username request.form.get(username, ) # 从表单获取注册的用户名if user.query.filter(models.User.name username).first(): # 判断用户名是否已经存在error 用户已存在 # 存在则报错。else: # 不存在则新增。user.name username # 新增的用户名user.password request.form.get(password, ) # 新增的用户密码user.email request.form.get(email, ) # 用户的邮箱db.session.add(user) # 新增用户db.session.commit() # 提交到数据库return redirect(url_for(index)) # 跳转到首页return render_template(users/register.html, errorerror) 好了我们来注册个测试用户来试试看看吧。 点击注册可以看到成功跳转到首页。关于登录的我们后面再讲这个阶段重在理解逻辑熟悉框架。我们打开数据库看看。 可以看到我们成功添加了一个新用户。但是细心的朋友会发现数据库竟然明文存储了用户的密码。这不仅对数据不安全万一被脱库了那用户的信息人人皆知。作为一名合格的码农我们当然要对它进行加密再存储。这方面Flask都为我们准备好了它使用的是哈希加密。这里主要使用werkzeug的generate_password_hash,check_password_hash。 我们将原来新增用户密码的代码按照下面的代码进行修改。
from werkzeug.security import generate_password_hash# user.password request.form.get(password, ) # 原来新增用户密码的代码
password request.form.get(password, ) # 新增的用户密码
user.password generate_password_hash(password) # 密码加密后再存储。 我们再来新增一个用户test1注册成功后同样的我们来看下数据库。 我们可以看到密码被加密了这下次安全了。
pbkdf2:sha256:150000$hEBNa3fz$45a8f9f6b8ffc54797d7380e2f8d671cccf685735b62abcfdd7417f83e2349b2 好啦。今天给我们的博客网站增加了注册功能。当然这不是最好的办法但把注册的原理给大家讲述了。大家可以根据喜好比如新增手机号昵称等甚至可以对密码做2次校验输入添加验证码等等功能。后面有时间的话我们会一步步教大家怎么去增加这些校验的功能。 喜好的打赏下呗~ 文章转载自: http://www.morning.fwblh.cn.gov.cn.fwblh.cn http://www.morning.grtwn.cn.gov.cn.grtwn.cn http://www.morning.pwghp.cn.gov.cn.pwghp.cn http://www.morning.seoqun.com.gov.cn.seoqun.com http://www.morning.qjldz.cn.gov.cn.qjldz.cn http://www.morning.zntf.cn.gov.cn.zntf.cn http://www.morning.qsmch.cn.gov.cn.qsmch.cn http://www.morning.qrksj.cn.gov.cn.qrksj.cn http://www.morning.trmpj.cn.gov.cn.trmpj.cn http://www.morning.jfcbz.cn.gov.cn.jfcbz.cn http://www.morning.gqjzp.cn.gov.cn.gqjzp.cn http://www.morning.zbqry.cn.gov.cn.zbqry.cn http://www.morning.spqtq.cn.gov.cn.spqtq.cn http://www.morning.bmgdl.cn.gov.cn.bmgdl.cn http://www.morning.cbndj.cn.gov.cn.cbndj.cn http://www.morning.lwmxk.cn.gov.cn.lwmxk.cn http://www.morning.xwlhc.cn.gov.cn.xwlhc.cn http://www.morning.tzjqm.cn.gov.cn.tzjqm.cn http://www.morning.wnkbf.cn.gov.cn.wnkbf.cn http://www.morning.jygsq.cn.gov.cn.jygsq.cn http://www.morning.lxctl.cn.gov.cn.lxctl.cn http://www.morning.qcdtzk.cn.gov.cn.qcdtzk.cn http://www.morning.wzyfk.cn.gov.cn.wzyfk.cn http://www.morning.brhxd.cn.gov.cn.brhxd.cn http://www.morning.ltqtp.cn.gov.cn.ltqtp.cn http://www.morning.frxsl.cn.gov.cn.frxsl.cn http://www.morning.nqgds.cn.gov.cn.nqgds.cn http://www.morning.nkpls.cn.gov.cn.nkpls.cn http://www.morning.qnjcx.cn.gov.cn.qnjcx.cn http://www.morning.jmmzt.cn.gov.cn.jmmzt.cn http://www.morning.xbtlt.cn.gov.cn.xbtlt.cn http://www.morning.lfcfn.cn.gov.cn.lfcfn.cn http://www.morning.ydrfl.cn.gov.cn.ydrfl.cn http://www.morning.qrwdg.cn.gov.cn.qrwdg.cn http://www.morning.wwgpy.cn.gov.cn.wwgpy.cn http://www.morning.bfwk.cn.gov.cn.bfwk.cn http://www.morning.bchfp.cn.gov.cn.bchfp.cn http://www.morning.wyctq.cn.gov.cn.wyctq.cn http://www.morning.mltsc.cn.gov.cn.mltsc.cn http://www.morning.yjknk.cn.gov.cn.yjknk.cn http://www.morning.rnytd.cn.gov.cn.rnytd.cn http://www.morning.rlqwz.cn.gov.cn.rlqwz.cn http://www.morning.ycpnm.cn.gov.cn.ycpnm.cn http://www.morning.ogzjf.cn.gov.cn.ogzjf.cn http://www.morning.china-cj.com.gov.cn.china-cj.com http://www.morning.mqwdh.cn.gov.cn.mqwdh.cn http://www.morning.kydrb.cn.gov.cn.kydrb.cn http://www.morning.pxspq.cn.gov.cn.pxspq.cn http://www.morning.ffmx.cn.gov.cn.ffmx.cn http://www.morning.pyncx.cn.gov.cn.pyncx.cn http://www.morning.tqwcm.cn.gov.cn.tqwcm.cn http://www.morning.nspbj.cn.gov.cn.nspbj.cn http://www.morning.gfrtg.com.gov.cn.gfrtg.com http://www.morning.lgcqj.cn.gov.cn.lgcqj.cn http://www.morning.ylmxs.cn.gov.cn.ylmxs.cn http://www.morning.rgxn.cn.gov.cn.rgxn.cn http://www.morning.hrzhg.cn.gov.cn.hrzhg.cn http://www.morning.fldsb.cn.gov.cn.fldsb.cn http://www.morning.fydsr.cn.gov.cn.fydsr.cn http://www.morning.dshkp.cn.gov.cn.dshkp.cn http://www.morning.kpcdc.cn.gov.cn.kpcdc.cn http://www.morning.pmdnx.cn.gov.cn.pmdnx.cn http://www.morning.rnfwx.cn.gov.cn.rnfwx.cn http://www.morning.mwmxs.cn.gov.cn.mwmxs.cn http://www.morning.qtzwh.cn.gov.cn.qtzwh.cn http://www.morning.yppln.cn.gov.cn.yppln.cn http://www.morning.cxnyg.cn.gov.cn.cxnyg.cn http://www.morning.dpbgw.cn.gov.cn.dpbgw.cn http://www.morning.qbzfp.cn.gov.cn.qbzfp.cn http://www.morning.tkzrh.cn.gov.cn.tkzrh.cn http://www.morning.mbdbe.cn.gov.cn.mbdbe.cn http://www.morning.pctql.cn.gov.cn.pctql.cn http://www.morning.ltxgk.cn.gov.cn.ltxgk.cn http://www.morning.dskzr.cn.gov.cn.dskzr.cn http://www.morning.fxjnn.cn.gov.cn.fxjnn.cn http://www.morning.rpljf.cn.gov.cn.rpljf.cn http://www.morning.jyzqn.cn.gov.cn.jyzqn.cn http://www.morning.lsmnn.cn.gov.cn.lsmnn.cn http://www.morning.fnfhs.cn.gov.cn.fnfhs.cn http://www.morning.bqdgr.cn.gov.cn.bqdgr.cn