两天时间,用Python重写了我的Markdown-Online系统,主要使用了Flask技术栈的基础知识,这不比游戏有意思?

首先是`LoginForm`的代码:



```

# forms.py

class LoginForm(FlaskForm):

    email = EmailField('Email', validators=[DataRequired(), Email()])

    password = PasswordField('Password', validators=[DataRequired()])

    submit = SubmitField('Sign In')



```



然后是对应的`html`



```

<!-- login.html -->

{% extends 'base.html' %}

{% from 'bootstrap5/form.html' import render_field %}



{% block content %}

<div style="height: 600px; padding-top: 100px;">

    <div style="width: 36rem;" class="mx-auto shadow-sm px-3 py-5 bg-body rounded">

        <h2>Sign In</h2>

        <hr>

        {% for msg in get_flashed_messages() %}

        <p class="text-sm-start text-warning">{{msg}}</p>

        {% endfor %}

        <form method="post">

            {{ form.csrf_token() }}

            {{ render_field(form.email,placeholder='Your email')}}

            {{render_field(form.password,placeholder='Your password')}}

            {{render_field(form.submit)}}

            <a class="btn btn-light" href="{{url_for('auth.register')}}"> Sign Up</a>

        </form>

    </div>

</div>

{% endblock %}



```



最后是对应的后端`view`代码:



```

@bp.route('/login', methods=['POST', 'GET'])

def login():

    print('auth/login')

    loginForm = LoginForm()

    if loginForm.validate_on_submit():  #登录

        print('validated')

        email = loginForm.email.data

        password = loginForm.password.data

        user = User.query.filter_by(email=email).first()

        if not user:

            flash('User does not exist')

            return render_template('login.html', form=loginForm)

        if user.role >= const.DB_ROLE_VISITOR:

            flash('Please verify the mailbox first')

            return redirect(url_for('auth.email_verify'))

        if not user.check_password(password):

            flash('Incorrect password')

            return render_template('login.html', form=loginForm)

        login_user(user)

        return redirect(url_for('post.list'))

    return render_template('login.html', form=loginForm)



```
  1. 注册界面

    在这里插入图片描述

    注册界面的代码和登录几乎没有太大的区别。

    首先是注册表单:

    
    class RegisterForm(FlaskForm):
    
        email = EmailField('Email', validators=[DataRequired(), Email()])
    
        username = StringField('Username', validators=[DataRequired(), Length(min=3, max=16)])
    
        password = PasswordField('Password', validators=[DataRequired(), Length(min=6, max=12)])
    
        submit = SubmitField('Sign Up')
    
    
    
    

    然后是对应的前端代码:

    
    <!-- register.html -->
    
    {% extends 'base.html' %}
    
    {% from 'bootstrap5/form.html' import render_field,render_form_row %}
    
    	
    
    {% block content %}
    
    <div style="height: 600px; padding-top: 100px;">
    
    	   <div style="width: 36rem;" class="mx-auto shadow-sm px-3 py-5  bg-body rounded">
    
    	       <h2>Sign Up</h2>
    
    	       <hr>
    
    	       {% for msg in get_flashed_messages() %}
    
    	       <p class="text-sm-start text-warning">{{msg}}</p>
    
    	       {% endfor %}
    
    	       <form method="post">
    
    	           {{ form.csrf_token() }}
    
    	           {{ render_field(form.email,placeholder='Enter your email address')}}
    
    	           {{ render_field(form.username,placeholder='Make a name you like')}}
    
    	           {{render_field(form.password,placeholder='Create a strong password')}}
    
    	           {{render_field(form.submit)}}
    
    	           <a class="btn btn-light" href="{{url_for('auth.login')}}"> Sign In</a>
    
    	       </form>
    
    	   </div>
    
    </div>
    
    {% endblock %}
    
    
    
    

    最后是视图代码:

    
    @bp.route('/register', methods=['POST', 'GET'])
    
    def register():
    
        print('auth/register')
    
        registerForm = RegisterForm()
    
        if registerForm.validate_on_submit():
    
            print('validated')
    
            email = registerForm.email.data
    
            username = registerForm.email.data
    
            password = registerForm.password.data
    
            user = User.query.filter_by(email=email).first()
    
            if user:
    
                flash('Mailbox registered')
    
                return render_template('register.html', form=registerForm)
    
            user = User(email=email, password=password, username=username)
    
            addUser(user)
    
            newPost(user)  # 为当前用户添加一个文章
    
            return redirect(url_for('auth.email_send', emailbox=email))
    
        return render_template('register.html', form=registerForm)
    
    
    
    
  2. 密码修改

    在这里插入图片描述

    密码修改表单:

    
    class RePasswardForm(FlaskForm):
    
        password = PasswordField('Original Password', validators=[DataRequired()])
    
        newpaswd = PasswordField('New Password', validators=[DataRequired(), Length(min=6, max=12)])
    
        confpswd = PasswordField( 'Confirm Password', validators=[DataRequired(), Length(min=6, max=12)])
    
        submit = SubmitField('Confirm')
    
    
    
    

    密码修改界面:

    
    {% extends 'base.html' %}
    
    {% from 'bootstrap5/form.html' import render_field %}
    
    
    
    {% block content %}
    
    <div style="height: 600px; padding-top: 100px;">
    
        <div style="width: 36rem;" class="mx-auto shadow-sm px-3 py-5 bg-body rounded">
    
            {% for msg in get_flashed_messages() %}
    
            <p class="text-sm-start text-warning">{{msg}}</p>
    
            {% endfor %}
    
            <form method="post">
    
                {{ form.csrf_token() }}
    
                {{ render_field(form.password) }}
    
                {{ render_field(form.newpaswd) }}
    
                {{ render_field(form.confpswd) }}
    
                {{ render_field(form.submit) }}
    
                <a class="btn btn-light" href="{{url_for('auth.register')}}"> Sign Up</a>
    
            </form>
    
        </div>
    
    </div>
    
    {% endblock %}
    
    
    
    

    密码修改后端代码:

    
    @login_required
    
    @bp.route("/resetpwd/<int:id>", methods=['GET', 'POST'])
    
    def resetpwd(id):
    
        print('auth/resetpwd')
    
        resetForm = RePasswardForm()
    
        if resetForm.validate_on_submit():
    
            password = resetForm.password.data
    
            newpaswd = resetForm.newpaswd.data
    
            if not current_user.check_password(password):
    
                flash('The original password is incorrect')
    
                return render_template('reset_pwd.html', form=resetForm)
    
            current_user.password = newpaswd
    
            updateUser(current_user)
    
            return redirect(url_for('auth.logout'))
    
        return render_template('reset_pwd.html', form=resetForm)
    
    
    
    
  3. 邮箱验证

    在这里插入图片描述

    这也是本次更新的重点,用户在注册账号之后,系统会对注册邮箱发送一封邮件,用户在没有验证邮箱之前不能登录系统。

    前后端的处理和之前一样,本次不再重复,只贴一段flask-email的使用代码:

    
    @bp.route('/email_send/<emailbox>')
    
    

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
。**

[外链图片转存中…(img-5szEMwdc-1715805508255)]

[外链图片转存中…(img-iwZcrElY-1715805508256)]

[外链图片转存中…(img-pfK47o99-1715805508256)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值