Chapter 9: Pagination (v0.9)
This commit is contained in:
		
							parent
							
								
									d1363e0326
								
							
						
					
					
						commit
						fdeb27d052
					
				|  | @ -50,3 +50,8 @@ class EditProfileForm(FlaskForm): | |||
| 
 | ||||
| class EmptyForm(FlaskForm): | ||||
|     submit = SubmitField('Submit') | ||||
| 
 | ||||
| 
 | ||||
| class PostForm(FlaskForm): | ||||
|     post = TextAreaField('Say something', validators=[DataRequired()]) | ||||
|     submit = SubmitField('Submit') | ||||
|  |  | |||
|  | @ -3,8 +3,9 @@ from flask import render_template, flash, redirect, url_for, request | |||
| from flask_login import login_user, logout_user, current_user, login_required | ||||
| from werkzeug.urls import url_parse | ||||
| from app import app, db | ||||
| from app.forms import LoginForm, RegistrationForm, EditProfileForm, EmptyForm | ||||
| from app.models import User | ||||
| from app.forms import LoginForm, RegistrationForm, EditProfileForm, \ | ||||
|     EmptyForm, PostForm | ||||
| from app.models import User, Post | ||||
| 
 | ||||
| 
 | ||||
| @app.before_request | ||||
|  | @ -14,21 +15,41 @@ def before_request(): | |||
|         db.session.commit() | ||||
| 
 | ||||
| 
 | ||||
| @app.route('/') | ||||
| @app.route('/index') | ||||
| @app.route('/', methods=['GET', 'POST']) | ||||
| @app.route('/index', methods=['GET', 'POST']) | ||||
| @login_required | ||||
| def index(): | ||||
|     posts = [ | ||||
|         { | ||||
|             'author': {'username': 'John'}, | ||||
|             'body': 'Beautiful day in Portland!' | ||||
|         }, | ||||
|         { | ||||
|             'author': {'username': 'Susan'}, | ||||
|             'body': 'The Avengers movie was so cool!' | ||||
|         } | ||||
|     ] | ||||
|     return render_template('index.html', title='Home', posts=posts) | ||||
|     form = PostForm() | ||||
|     if form.validate_on_submit(): | ||||
|         post = Post(body=form.post.data, author=current_user) | ||||
|         db.session.add(post) | ||||
|         db.session.commit() | ||||
|         flash('Your post is now live!') | ||||
|         return redirect(url_for('index')) | ||||
|     page = request.args.get('page', 1, type=int) | ||||
|     posts = current_user.followed_posts().paginate( | ||||
|         page=page, per_page=app.config['POSTS_PER_PAGE'], error_out=False) | ||||
|     next_url = url_for('index', page=posts.next_num) \ | ||||
|         if posts.has_next else None | ||||
|     prev_url = url_for('index', page=posts.prev_num) \ | ||||
|         if posts.has_prev else None | ||||
|     return render_template('index.html', title='Home', form=form, | ||||
|                            posts=posts.items, next_url=next_url, | ||||
|                            prev_url=prev_url) | ||||
| 
 | ||||
| 
 | ||||
| @app.route('/explore') | ||||
| @login_required | ||||
| def explore(): | ||||
|     page = request.args.get('page', 1, type=int) | ||||
|     posts = Post.query.order_by(Post.timestamp.desc()).paginate( | ||||
|         page=page, per_page=app.config['POSTS_PER_PAGE'], error_out=False) | ||||
|     next_url = url_for('explore', page=posts.next_num) \ | ||||
|         if posts.has_next else None | ||||
|     prev_url = url_for('explore', page=posts.prev_num) \ | ||||
|         if posts.has_prev else None | ||||
|     return render_template('index.html', title='Explore', posts=posts.items, | ||||
|                            next_url=next_url, prev_url=prev_url) | ||||
| 
 | ||||
| 
 | ||||
| @app.route('/login', methods=['GET', 'POST']) | ||||
|  | @ -74,12 +95,16 @@ def register(): | |||
| @login_required | ||||
| def user(username): | ||||
|     user = User.query.filter_by(username=username).first_or_404() | ||||
|     posts = [ | ||||
|         {'author': user, 'body': 'Test post #1'}, | ||||
|         {'author': user, 'body': 'Test post #2'} | ||||
|     ] | ||||
|     page = request.args.get('page', 1, type=int) | ||||
|     posts = user.posts.order_by(Post.timestamp.desc()).paginate( | ||||
|         page=page, per_page=app.config['POSTS_PER_PAGE'], error_out=False) | ||||
|     next_url = url_for('user', username=user.username, page=posts.next_num) \ | ||||
|         if posts.has_next else None | ||||
|     prev_url = url_for('user', username=user.username, page=posts.prev_num) \ | ||||
|         if posts.has_prev else None | ||||
|     form = EmptyForm() | ||||
|     return render_template('user.html', user=user, posts=posts, form=form) | ||||
|     return render_template('user.html', user=user, posts=posts.items, | ||||
|                            next_url=next_url, prev_url=prev_url, form=form) | ||||
| 
 | ||||
| 
 | ||||
| @app.route('/edit_profile', methods=['GET', 'POST']) | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
|     <table> | ||||
|         <tr valign="top"> | ||||
|             <td><img src="{{ post.author.avatar(36) }}"></td> | ||||
|             <td>{{ post.author.username }} says:<br>{{ post.body }}</td> | ||||
|             <td><a href="{{ url_for('user', username=post.author.username) }}">{{ post.author.username }}</a> says:<br>{{ post.body }}</td> | ||||
|         </tr> | ||||
|     </table> | ||||
|  |  | |||
|  | @ -11,6 +11,7 @@ | |||
|         <div> | ||||
|             Microblog: | ||||
|             <a href="{{ url_for('index') }}">Home</a> | ||||
|             <a href="{{ url_for('explore') }}">Explore</a> | ||||
|             {% if current_user.is_anonymous %} | ||||
|             <a href="{{ url_for('login') }}">Login</a> | ||||
|             {% else %} | ||||
|  | @ -29,5 +30,5 @@ | |||
|         {% endif %} | ||||
|         {% endwith %} | ||||
|         {% block content %}{% endblock %} | ||||
|     </body> | ||||
|   </body> | ||||
| </html> | ||||
|  |  | |||
|  | @ -2,7 +2,26 @@ | |||
| 
 | ||||
| {% block content %} | ||||
|     <h1>Hi, {{ current_user.username }}!</h1> | ||||
|     {% if form %} | ||||
|     <form action="" method="post"> | ||||
|         {{ form.hidden_tag() }} | ||||
|         <p> | ||||
|             {{ form.post.label }}<br> | ||||
|             {{ form.post(cols=32, rows=4) }}<br> | ||||
|             {% for error in form.post.errors %} | ||||
|             <span style="color: red;">[{{ error }}]</span> | ||||
|             {% endfor %} | ||||
|         </p> | ||||
|         <p>{{ form.submit() }}</p> | ||||
|     </form> | ||||
|     {% endif %} | ||||
|     {% for post in posts %} | ||||
|     <div><p>{{ post.author.username }} says: <b>{{ post.body }}</b></p></div> | ||||
|         {% include '_post.html' %} | ||||
|     {% endfor %} | ||||
|     {% if prev_url %} | ||||
|     <a href="{{ prev_url }}">Newer posts</a> | ||||
|     {% endif %} | ||||
|     {% if next_url %} | ||||
|     <a href="{{ next_url }}">Older posts</a> | ||||
|     {% endif %} | ||||
| {% endblock %} | ||||
|  |  | |||
|  | @ -33,4 +33,10 @@ | |||
|     {% for post in posts %} | ||||
|         {% include '_post.html' %} | ||||
|     {% endfor %} | ||||
|     {% if prev_url %} | ||||
|     <a href="{{ prev_url }}">Newer posts</a> | ||||
|     {% endif %} | ||||
|     {% if next_url %} | ||||
|     <a href="{{ next_url }}">Older posts</a> | ||||
|     {% endif %} | ||||
| {% endblock %} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue