

strptimeの第一引数は、文字列にする必要があります（TypeError: strptime() argument 1 must be str, not
None）がでてしまいます。  
create.htmlのフォームから送られてくるデーターは、文字列になるとのことで、  
strptime()の第一引数は、文字列になっているはずですが、なぜか、エラーと  
なってしまっています。

こちらの解決方法についてご教示いただければと思います。

ただし、DBへの登録はできております。

[code]

    # app.py
    
    from datetime import datetime
    
    from flask import Flask, render_template, request, redirect
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    URI = 'sqlite:///todo.db'
    app.config['SQLALCHEMY_DATABASE_URI'] = URI
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    db = SQLAlchemy(app)
    
    class Post(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        title = db.Column(db.String(140), nullable=False)
        detail = db.Column(db.String(100))
        due = db.Column(db.DateTime, nullable=False)
    
    
    @app.cli.command('initialize_DB')
    def initialize_DB():
        db.create_all()
    
    
    
    
    @app.route('/', methods=['GET', 'POST'])
    def index():
        if request == 'GET':
            posts = Post.query.all()
            return render_template('index.html', posts=posts)
        else:
            title = request.form.get('title')
            detail = request.form.get('detail')
            due = request.form.get('due')
    
            due = datetime.strptime(due, '%Y-%m-%d') # ここでエラー
        
            new_posts = Post(title=title, detail=detail, due=due)
            db.session.add(new_posts)
            db.session.commit()
    
            return redirect('/')
    
    
    @app.route('/create')
    def create():
        title = '登録画面'
        return render_template('create.html', title=title)
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    
    
[/code]

[code]

    <! -- create.html -->
    
    {% extends 'base.html' %}
    
    {% block content %}
    <form action="/" method="POST">
        <label for="title">Title</label>
        <input type="text" name="title">
        <label for="detail">Detail</label>
        <input type="text" name="detail">
        <label for="due">Due</label>
        <input type="date" name="due" required>
        <input type="submit" value="Create">
    </form>
    
    {% endblock %}
    
    
    
[/code]


CC BY-SA 4.0
2023-01-17T08:00:39.980
93403
2023-04-07T14:15:54.370
2023-01-17T08:31:58.503
question
python flask
python strptime() 第一引数エラーについて


`if request == 'GET':` としていますが、HTTP REQUEST METHOD なので、`if request.method ==
'GET':`

と修正したことで解決しました。


CC BY-SA 4.0
2023-01-17T08:45:11.913
93407
2023-04-07T14:15:54.370
2023-04-07T14:15:54.370
9820
93403
answer