commit
						b94876f39d
					
				@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					venv/
 | 
				
			||||||
 | 
					__pycache__/
 | 
				
			||||||
											
												Binary file not shown.
											
										
									
								@ -0,0 +1,63 @@
 | 
				
			|||||||
 | 
					from flask import Flask, render_template, url_for, flash, redirect
 | 
				
			||||||
 | 
					from forms import RegistrationForm, LoginForm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					app = Flask(__name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					app.config['SECRET_KEY'] = 'db3746b2ffa650b3804e4316d227f853'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					posts = [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        'pagetitle': 'home page'
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					navbaritems = [
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        'name': 'home',
 | 
				
			||||||
 | 
					        'url': 'home'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        'name': 'login',
 | 
				
			||||||
 | 
					        'url': 'login'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        'name': 'register',
 | 
				
			||||||
 | 
					        'url': 'register'
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@app.route("/")
 | 
				
			||||||
 | 
					@app.route("/home")
 | 
				
			||||||
 | 
					def home():
 | 
				
			||||||
 | 
					    return render_template('home.html', posts=posts, navbaritems=navbaritems)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@app.route("/about")
 | 
				
			||||||
 | 
					def about():
 | 
				
			||||||
 | 
					    return render_template('about.html', title='About', posts=posts, navbaritems=navbaritems)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@app.route("/register", methods=['GET', 'POST'])
 | 
				
			||||||
 | 
					def register():
 | 
				
			||||||
 | 
					    form = RegistrationForm()
 | 
				
			||||||
 | 
					    if form.validate_on_submit():
 | 
				
			||||||
 | 
					        flash(f'Account created for {form.username.data}!')
 | 
				
			||||||
 | 
					        return redirect(url_for('home'))
 | 
				
			||||||
 | 
					    return render_template('register.html', title='Register', form=form)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@app.route("/login", methods=['GET', 'POST'])
 | 
				
			||||||
 | 
					def login():
 | 
				
			||||||
 | 
					    form = LoginForm()
 | 
				
			||||||
 | 
					    if form.validate_on_submit():
 | 
				
			||||||
 | 
					        if form.email.data == 'admin' and form.password.data == 'admin':
 | 
				
			||||||
 | 
					            flash('You have been log in !')
 | 
				
			||||||
 | 
					            return redirect(url_for('home'))
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            flash('Login Unsuccessful')
 | 
				
			||||||
 | 
					    return render_template('login.html', title='Login', form=form)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					    app.run(debug=True, port=8700)
 | 
				
			||||||
@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					from flask_wtf import FlaskForm
 | 
				
			||||||
 | 
					from wtforms import StringField, PasswordField, SubmitField, BooleanField
 | 
				
			||||||
 | 
					from wtforms.validators import DataRequired, Length, Email, EqualTo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class RegistrationForm(FlaskForm):
 | 
				
			||||||
 | 
					    username = StringField('Username', 
 | 
				
			||||||
 | 
					                           validators=[DataRequired(), Length(min=2, max=20)]) 
 | 
				
			||||||
 | 
					    email = StringField('Email', 
 | 
				
			||||||
 | 
					                        validators=[DataRequired(), Email()])
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    password = PasswordField('Password' , validators=[DataRequired()])
 | 
				
			||||||
 | 
					    confirm_password = PasswordField('Confirm Password' , 
 | 
				
			||||||
 | 
					                                     validators=[DataRequired(), EqualTo('password')])
 | 
				
			||||||
 | 
					    submit =SubmitField('Sign Up')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LoginForm(FlaskForm):
 | 
				
			||||||
 | 
					    email = StringField('Email', 
 | 
				
			||||||
 | 
					                        validators=[DataRequired(), Email()])
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    password = PasswordField('Password' , validators=[DataRequired()])
 | 
				
			||||||
 | 
					    remember = BooleanField('Remember Me')
 | 
				
			||||||
 | 
					    submit =SubmitField('Login')
 | 
				
			||||||
											
												Binary file not shown.
											
										
									
								@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					{% extends "layout.html" %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block content %}
 | 
				
			||||||
 | 
					{% for post in posts %}
 | 
				
			||||||
 | 
					<p> {{ post.universe }} </p>
 | 
				
			||||||
 | 
					<p> {{ post.powerlevel }} </p>
 | 
				
			||||||
 | 
					<i> {{ post.date_posted }} </i>
 | 
				
			||||||
 | 
					{% endfor %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% endblock content %}
 | 
				
			||||||
@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					{% extends "layout.html" %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block content %}
 | 
				
			||||||
 | 
					{% for post in posts %}
 | 
				
			||||||
 | 
					<h1>{{ post.pagetitle }}</h1>
 | 
				
			||||||
 | 
					{% endfor %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% endblock content %}
 | 
				
			||||||
@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="en">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <link rel="stylesheet" href="{{ url_for('static', filename='main.css')}}">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {% if title %}
 | 
				
			||||||
 | 
					    <title>Blog post - {{ title }}</title>
 | 
				
			||||||
 | 
					    {% else %}
 | 
				
			||||||
 | 
					    <title>Blog posts</title>
 | 
				
			||||||
 | 
					    {% endif %}
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {% block navbar %}
 | 
				
			||||||
 | 
					    {% for post in navbaritems %}
 | 
				
			||||||
 | 
					    <li><a href="{{ post.url }}"> {{ post.name }} </a></li>
 | 
				
			||||||
 | 
					    {% endfor %}
 | 
				
			||||||
 | 
					    {% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {% with messages = get_flashed_messages(with_categories=true) %}
 | 
				
			||||||
 | 
					    {% if messages %}
 | 
				
			||||||
 | 
					    {% for caterogy, message in messages %}
 | 
				
			||||||
 | 
					    <div>
 | 
				
			||||||
 | 
					        {{ message }}
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    {% endfor %}
 | 
				
			||||||
 | 
					    {% endif %}
 | 
				
			||||||
 | 
					    {% endwith %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        {% block content %}
 | 
				
			||||||
 | 
					        {% endblock %}
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
@ -0,0 +1,61 @@
 | 
				
			|||||||
 | 
					{% extends "layout.html" %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block content %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div>
 | 
				
			||||||
 | 
					    <form method="POST" action="">
 | 
				
			||||||
 | 
					        {{ form.hidden_tag() }}
 | 
				
			||||||
 | 
					        <fieldset>
 | 
				
			||||||
 | 
					            <legend>Login</legend>
 | 
				
			||||||
 | 
					            <div>
 | 
				
			||||||
 | 
					                {{ form.email.label() }}
 | 
				
			||||||
 | 
					                {% if form.email.errors %}
 | 
				
			||||||
 | 
					                {{ form.email() }}
 | 
				
			||||||
 | 
					                <div>
 | 
				
			||||||
 | 
					                    {% for errors in form.email.errors %}
 | 
				
			||||||
 | 
					                    <span>{{ error }}</span>
 | 
				
			||||||
 | 
					                    {% endfor %}
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                {% else %}
 | 
				
			||||||
 | 
					                {{ form.email() }}
 | 
				
			||||||
 | 
					                {% endif %}
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <br>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div>
 | 
				
			||||||
 | 
					                {{ form.password.label() }}
 | 
				
			||||||
 | 
					                {% if form.password.errors %}
 | 
				
			||||||
 | 
					                {{ form.password()}}
 | 
				
			||||||
 | 
					                <div>
 | 
				
			||||||
 | 
					                    {% for errors in form.password.errors %}
 | 
				
			||||||
 | 
					                    <span>{{ error }}</span>
 | 
				
			||||||
 | 
					                    {% endfor %}
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                {% else %}
 | 
				
			||||||
 | 
					                {{ form.password() }}
 | 
				
			||||||
 | 
					                {% endif %}
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <br>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div>
 | 
				
			||||||
 | 
					                {{ form.remember() }}
 | 
				
			||||||
 | 
					                {{ form.remember.label() }}
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </fieldset>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					            {{ form.submit() }}
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <small>
 | 
				
			||||||
 | 
					            <a href="#">Forgot Password</a>
 | 
				
			||||||
 | 
					        </small>
 | 
				
			||||||
 | 
					    </form>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div>
 | 
				
			||||||
 | 
					    <small>Need an Account ? <a href="{{ url_for('register') }}">Sign Up Now</a></small>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% endblock content %}
 | 
				
			||||||
@ -0,0 +1,82 @@
 | 
				
			|||||||
 | 
					{% extends "layout.html" %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block content %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div>
 | 
				
			||||||
 | 
					    <form method="POST" action="">
 | 
				
			||||||
 | 
					        {{ form.hidden_tag() }}
 | 
				
			||||||
 | 
					        <fieldset>
 | 
				
			||||||
 | 
					            <legend>Join Today</legend>
 | 
				
			||||||
 | 
					            <div>
 | 
				
			||||||
 | 
					                {{ form.username.label() }}
 | 
				
			||||||
 | 
					                    {% if form.username.errors %}
 | 
				
			||||||
 | 
					                        {{ form.username()}}
 | 
				
			||||||
 | 
					                        <div>
 | 
				
			||||||
 | 
					                            {% for errors in form.username.errors %}
 | 
				
			||||||
 | 
					                            <span>{{ error }}</span>
 | 
				
			||||||
 | 
					                            {% endfor %}
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        {% else %}
 | 
				
			||||||
 | 
					                            {{ form.username() }}
 | 
				
			||||||
 | 
					                    {% endif %}
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <br>
 | 
				
			||||||
 | 
					            <div>
 | 
				
			||||||
 | 
					                {{ form.email.label() }}
 | 
				
			||||||
 | 
					                    {% if form.email.errors %}
 | 
				
			||||||
 | 
					                        {{ form.email() }}
 | 
				
			||||||
 | 
					                        <div>
 | 
				
			||||||
 | 
					                            {% for errors in form.email.errors %}
 | 
				
			||||||
 | 
					                            <span>{{ error }}</span>
 | 
				
			||||||
 | 
					                            {% endfor %}
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        {% else %}
 | 
				
			||||||
 | 
					                            {{ form.email() }}
 | 
				
			||||||
 | 
					                    {% endif %}
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <br>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div>
 | 
				
			||||||
 | 
					                {{ form.password.label() }}
 | 
				
			||||||
 | 
					                    {% if form.password.errors %}
 | 
				
			||||||
 | 
					                        {{ form.password()}}
 | 
				
			||||||
 | 
					                        <div>
 | 
				
			||||||
 | 
					                            {% for errors in form.password.errors %}
 | 
				
			||||||
 | 
					                            <span>{{ error }}</span>
 | 
				
			||||||
 | 
					                            {% endfor %}
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        {% else %}
 | 
				
			||||||
 | 
					                            {{ form.password() }}
 | 
				
			||||||
 | 
					                    {% endif %}
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <br>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div>
 | 
				
			||||||
 | 
					                {{ form.confirm_password.label() }}
 | 
				
			||||||
 | 
					                    {% if form.confirm_password.errors %}
 | 
				
			||||||
 | 
					                        {{ form.confirm_password()}}
 | 
				
			||||||
 | 
					                        <div>
 | 
				
			||||||
 | 
					                            {% for errors in form.confirm_password.errors %}
 | 
				
			||||||
 | 
					                            <span>{{ error }}</span>
 | 
				
			||||||
 | 
					                            {% endfor %}
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        {% else %}
 | 
				
			||||||
 | 
					                            {{ form.confirm_password() }}
 | 
				
			||||||
 | 
					                    {% endif %}
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </fieldset>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					            {{ form.submit() }}
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </form>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div>
 | 
				
			||||||
 | 
					    <small>Already Have an Account ? <a href="{{ url_for('login') }}">Sign In</a></small>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% endblock content %}
 | 
				
			||||||
											
												Binary file not shown.
											
										
									
								
											
												Binary file not shown.
											
										
									
								
					Loading…
					
					
				
		Reference in new issue