JAVA网络爬虫
HttpClient

导航

 

主要代码

  • 后端代码

    from werkzeug.utils import secure_filename
    import os
    
    # 修改文件名称
    def change_filename(filename):
        # os.path.splitext(“文件路径”)    分离文件名与扩展名;默认返回(fname, fextension)元组,可做切片操作   意思是filename是个元祖(文件名, 后缀名)
        fileinfo = os.path.splitext(filename)
        # fileinfo[-1] 就是 fileinfo的后缀
        filename = datetime.now().strftime("%Y%m%d%H%M%S") + str(uuid.uuid4().hex) + fileinfo[-1]
        return filename
    
    
      # 上传文件
      # secure_filename是传入的文件名更加安全
      # form.face.data.filename face头像的名称
      file_face = secure_filename(form.face.data.filename)
      # 判断app.config["FC_DIR"]文件是否存在
      if not os.path.exists(app.config["FC_DIR"]):
          # 递归创建app.config["FC_DIR"]
          os.makedirs(app.config["FC_DIR"])
          # 给该文件设置读写权限
          os.chmod(app.config["FC_DIR"], "rw")
    
      user.face = change_filename(file_face)
      form.face.data.save(app.config['FC_DIR'] + user.face)
    

案列

  • form.py

    from flask_wtf import FlaskForm
    from wtforms import StringField, SubmitField, FileField, TextAreaField
    from wtforms.validators import DataRequired, Email
    
    class UserDetailForm(FlaskForm):
        name = StringField(
            label="昵称",
            validators=[
                DataRequired("请输入昵称! ")
            ],
            description="昵称",
            render_kw={
                "class": "form-control input-lg",
                "placeholder": "请输入昵称! "
            }
        )
    
        email = StringField(
            label="邮箱",
            validators=[
                DataRequired("请输入邮箱! "),
                Email(message="请输入正确格式的邮箱..")
            ],
            description="邮箱",
            render_kw={
                "class": "form-control",
                "placeholder": "请输入邮箱! "
            }
        )
    
        phone = StringField(
            label="手机号码",
            validators=[
                DataRequired("请输入手机号码! "),
                Regexp("1[345789]\d{9}", message="请输入正确格式的手机号码.. ")
            ],
            description="手机号码",
            render_kw={
                "class": "form-control",
                "placeholder": "请输入手机号码! "
            }
        )
    
        face = FileField(
            label="头像",
            validators=[
                DataRequired("请上传头像! ")
            ],
            description="头像",
        )
    
        info = TextAreaField(
            label="简介",
            validators=[
                DataRequired("请输入简介")
            ],
            description="简介",
            render_kw={
                "class": "form-control",
                "rows": 10
            }
        )
    
        submit = SubmitField(
            '保存修改',
            render_kw={
                "class": "btn btn-success"
            }
        )
    
  • view.py

    
    from flask import render_template, redirect, url_for, flash
    from werkzeug.utils import secure_filename
    
    from . import home
    from .forms import UserDetailForm
    from ..models import User
    from app import db, app
    
    from datetime import datetime
    
    import os
    
    
    # 修改文件名称
    def change_filename(filename):
        # os.path.splitext(“文件路径”)    分离文件名与扩展名;默认返回(fname, fextension)元组,可做切片操作   意思是filename是个元祖(文件名, 后缀名)
        fileinfo = os.path.splitext(filename)
        # fileinfo[-1] 就是 fileinfo的后缀
        filename = datetime.now().strftime("%Y%m%d%H%M%S") + str(uuid.uuid4().hex) + fileinfo[-1]
        return filename
    
    @home.route("/user/", methods=['GET', 'POST'])
    @user_login_required
    def user():
        form = UserDetailForm()
        user = User.query.filter_by(id=session["user_id"]).first()
        form.face.validators = []
        if not user:
            flash("用户不存在", "err")
            return redirect(url_for("home.user"))
        if request.method == 'GET':
            form.name.data = user.name
            form.email.data = user.email
            form.phone.data = user.phone
            form.face.data = user.face
            form.info.data = user.info
        else:
            if form.validate_on_submit():
                data = form.data
                # secure_filename是传入的文件名更加安全
                # form.face.data.filename face头像的名称
                file_face = secure_filename(form.face.data.filename)
                # 判断app.config["FC_DIR"]文件是否存在
                if not os.path.exists(app.config["FC_DIR"]):
                    # 递归创建app.config["FC_DIR"]
                    os.makedirs(app.config["FC_DIR"])
                    # 给该文件设置读写权限
                    os.chmod(app.config["FC_DIR"], "rw")
    
                user.face = change_filename(file_face)
                form.face.data.save(app.config['FC_DIR'] + user.face)
    
                user_obj = User.query.filter_by(name=data["name"]).first()
                if user_obj:
                    flash("该昵称已被使用..", "err_name")
                    return redirect(url_for("home.user"))
    
                user_obj = User.query.filter_by(email=data["email"]).first()
                if user_obj:
                    flash("该邮箱已被使用..", "err_email")
                    return redirect(url_for("home.user"))
    
                user_obj = User.query.filter_by(phone=data["phone"]).first()
                if user_obj:
                    flash("该电话号码已被使用..", "err_phone")
                    return redirect(url_for("home.user"))
    
                user.name = data["name"]
                user.email = data["email"]
                user.phone = data["phone"]
                user.info = data["info"]
                db.session.commit()
                flash("修改成功..", "ok")
        return render_template("home/user.html", form=form, user=user)
    
    
  • html

     <div class="panel-body">
                    {% for msg in get_flashed_messages(category_filter=['ok']) %}
                        <p class="login-box-msg" style="color: green;">{{ msg }}</p>
                    {% endfor %}
    
                    {% for msg in get_flashed_messages(category_filter=['err']) %}
                        <p class="login-box-msg" style="color: red;">{{ msg }}</p>
                    {% endfor %}
    
                    {% for msg in get_flashed_messages(category_filter=['err_name']) %}
                        <p class="login-box-msg" style="color: red;">{{ msg }}</p>
                    {% endfor %}
    
                    {% for msg in get_flashed_messages(category_filter=['err_email']) %}
                        <p class="login-box-msg" style="color: red;">{{ msg }}</p>
                    {% endfor %}
    
                    {% for msg in get_flashed_messages(category_filter=['err_phone']) %}
                        <p class="login-box-msg" style="color: red;">{{ msg }}</p>
                    {% endfor %}
    
                    {#                multipart/form-data 不设置这个文件上传就是string类型#}
                    <form role="form" method="post" enctype="multipart/form-data">
                        {{ form.csrf_token }}
                        <fieldset>
                            <div class="form-group">
                                <label for="input_name"><span
                                        class="glyphicon glyphicon-user"></span>&nbsp;{{ form.name.label }}</label>
                                {{ form.name }}
                                {% for err in form.name.errors %}
                                    <div class="col-md-12" id="input_pwd">
                                        <font style="color: red;">{{ err }}</font>
                                    </div>
                                {% endfor %}
                            </div>
    
                            <div class="form-group">
                                <label for="input_email"><span
                                        class="glyphicon glyphicon-envelope"></span>&nbsp;{{ form.email.label }}</label>
                                {{ form.email }}
                                {% for err in form.email.errors %}
                                    <div class="col-md-12" id="input_pwd">
                                        <font style="color: red;">{{ err }}</font>
                                    </div>
                                {% endfor %}
                            </div>
    
                            <div class="form-group">
                                <label for="input_phone"><span
                                        class="glyphicon glyphicon-phone"></span>&nbsp;{{ form.phone.label }}</label>
                                {{ form.phone }}
                                {% for err in form.phone.errors %}
                                    <div class="col-md-12" id="input_pwd">
                                        <font style="color: red;">{{ err }}</font>
                                    </div>
                                {% endfor %}
                            </div>
    
                            <div class="form-group">
                                <label for="input_face"><span
                                        class="glyphicon glyphicon-picture"></span>&nbsp;{{ form.face.label }}</label>
                                {{ form.face }}
                                {% if user.face %}
                                    <img src="{{ url_for("static", filename="users/" + user.face) }}"
                                         width="300" height="500" class="img-responsive img-rounded">
                                {% else %}
                                    <img src="holder.js/100x100" width="300" height="500" class="img-responsive img-rounded">
                                {% endif %}
    
                                {% for err in form.face.errors %}
                                    <div class="col-md-12" id="input_pwd">
                                        <font style="color: red;">{{ err }}</font>
                                    </div>
                                {% endfor %}
                            </div>
    
                            <div class="form-group">
                                <label for="input_info"><span
                                        class="glyphicon glyphicon-edit"></span>&nbsp;{{ form.info.label }}</label>
                                {{ form.info }}
                                {% for err in form.info.errors %}
                                    <div class="col-md-12" id="input_pwd">
                                        <font style="color: red;">{{ err }}</font>
                                    </div>
                                {% endfor %}
                            </div>
                            {{ form.submit }}
                        </fieldset>
                    </form>
                </div>
            </div>
    
posted on 2019-08-28 15:48  gmlgxx  阅读(130)  评论(0)    收藏  举报