Skip to content

Commit a3b1f0c

Browse files
committed
add section17 18 19
1 parent 0c900bb commit a3b1f0c

File tree

32 files changed

+717
-0
lines changed

32 files changed

+717
-0
lines changed

section17/application/Pipfile

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
[[source]]
2+
3+
url = "https://pypi.python.org/simple"
4+
verify_ssl = true
5+
name = "pypi"
6+
7+
8+
[packages]
9+
10+
flask = "*"
11+
flask-sqlalchemy = "*"
12+
13+
14+
[dev-packages]
15+
16+
17+
18+
[requires]
19+
20+
python_version = "3.6"

section17/application/Pipfile.lock

Lines changed: 87 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from flask import Flask
2+
from flask_sqlalchemy import SQLAlchemy
3+
4+
app = Flask(__name__)
5+
app.config.from_object('flask_blog.config')
6+
7+
db = SQLAlchemy(app)
8+
9+
import flask_blog.views
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
SQLALCHEMY_DATABASE_URI = 'sqlite:///flask_blog.db'
2+
SQLALCHEMY_TRACK_MODIFICATIONS = True
3+
DEBUG = True
4+
SECRET_KEY = 'secret key'
5+
USERNAME = 'john'
6+
PASSWORD = 'due123'
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{% extends "layout.html" %}
2+
{% block body %}
3+
投稿がありません
4+
{% endblock %}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<!doctype html>
2+
<title>Flask Blog</title>
3+
4+
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
5+
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
6+
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
7+
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
8+
9+
10+
<div class="container">
11+
<nav class="navbar navbar-expand-lg navbar-light bg-light">
12+
<a class="navbar-brand" href="{{ url_for('show_entries') }}">Flask Blog</a>
13+
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false"
14+
aria-label="Toggle navigation">
15+
<span class="navbar-toggler-icon"></span>
16+
</button>
17+
18+
<div class="collapse navbar-collapse" id="navbarNav">
19+
<ul class="nav navbar-nav navbar-right">
20+
{% if not session.logged_in %}
21+
<li class="nav-item">
22+
<a class="nav-link" href="{{ url_for('login') }}">ログイン</a>
23+
</li>
24+
{% else %}
25+
<li class="nav-item">
26+
<a class="nav-link" href="{{ url_for('logout') }}">ログアウト</a>
27+
</li>
28+
{% endif %}
29+
</ul>
30+
</div>
31+
</nav>
32+
33+
{% for message in get_flashed_messages() %}
34+
<div class="alert alert-info" role="alert">
35+
{{ message }}
36+
</div>
37+
{% endfor %}
38+
39+
<div class="blog-body">
40+
{% block body %}{% endblock %}
41+
</div>
42+
43+
</div>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{% extends "layout.html" %} {% block body %}
2+
<form action="{{ url_for('login') }}" method=post>
3+
<div class="form-group">
4+
<label for="InputTitle">ユーザ名</label>
5+
<input type="text" class="form-control" id="InputTitle" name=username>
6+
</div>
7+
8+
<div class="form-group">
9+
<label for="InputPassword">パスワード</label>
10+
<input type="password" class="form-control" id="InputPassword" name=password>
11+
</div>
12+
13+
<button type="submit" class="btn btn-primary">ログイン</button>
14+
</form>
15+
{% endblock %}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from flask import request, redirect, url_for, render_template, flash, session
2+
from flask_blog import app
3+
4+
5+
@app.route('/')
6+
def show_entries():
7+
if not session.get('logged_in'):
8+
return redirect(url_for('login'))
9+
return render_template('entries/index.html')
10+
11+
12+
@app.route('/login', methods=['GET', 'POST'])
13+
def login():
14+
error = None
15+
if request.method == 'POST':
16+
if request.form['username'] != app.config['USERNAME']:
17+
flash('ユーザ名が異なります')
18+
elif request.form['password'] != app.config['PASSWORD']:
19+
flash('パスワードが異なります')
20+
else:
21+
session['logged_in'] = True
22+
flash('ログインしました')
23+
return redirect(url_for('show_entries'))
24+
return render_template('login.html')
25+
26+
27+
@app.route('/logout')
28+
def logout():
29+
session.pop('logged_in', None)
30+
flash('ログアウトしました')
31+
return redirect(url_for('show_entries'))

section17/application/server.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from flask_blog import app
2+
3+
if __name__ == '__main__':
4+
app.run()

section18/application/Pipfile

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
[[source]]
2+
3+
url = "https://pypi.python.org/simple"
4+
verify_ssl = true
5+
name = "pypi"
6+
7+
8+
[packages]
9+
10+
flask = "*"
11+
flask-sqlalchemy = "*"
12+
13+
14+
[dev-packages]
15+
16+
17+
18+
[requires]
19+
20+
python_version = "3.6"

0 commit comments

Comments
 (0)