Compare commits
No commits in common. 'bf105f704888f0140371aed652ffeac6eabef71f' and '7f8900d36c77b9ebb7a53637946ff675f34e4cda' have entirely different histories.
bf105f7048
...
7f8900d36c
@ -1,142 +0,0 @@ |
|||||||
# Byte-compiled / optimized / DLL files |
|
||||||
__pycache__/ |
|
||||||
*.py[cod] |
|
||||||
*$py.class |
|
||||||
|
|
||||||
# C extensions |
|
||||||
*.so |
|
||||||
|
|
||||||
# Distribution / packaging |
|
||||||
.Python |
|
||||||
build/ |
|
||||||
develop-eggs/ |
|
||||||
dist/ |
|
||||||
downloads/ |
|
||||||
eggs/ |
|
||||||
.eggs/ |
|
||||||
lib/ |
|
||||||
lib64/ |
|
||||||
parts/ |
|
||||||
sdist/ |
|
||||||
var/ |
|
||||||
wheels/ |
|
||||||
share/python-wheels/ |
|
||||||
*.egg-info/ |
|
||||||
.installed.cfg |
|
||||||
*.egg |
|
||||||
MANIFEST |
|
||||||
|
|
||||||
# PyInstaller |
|
||||||
# Usually these files are written by a python script from a template |
|
||||||
# before PyInstaller builds the exe, so as to inject date/other infos into it. |
|
||||||
*.manifest |
|
||||||
*.spec |
|
||||||
|
|
||||||
# Installer logs |
|
||||||
pip-log.txt |
|
||||||
pip-delete-this-directory.txt |
|
||||||
|
|
||||||
# Unit test / coverage reports |
|
||||||
htmlcov/ |
|
||||||
.tox/ |
|
||||||
.nox/ |
|
||||||
.coverage |
|
||||||
.coverage.* |
|
||||||
.cache |
|
||||||
nosetests.xml |
|
||||||
coverage.xml |
|
||||||
*.cover |
|
||||||
*.py,cover |
|
||||||
.hypothesis/ |
|
||||||
.pytest_cache/ |
|
||||||
cover/ |
|
||||||
|
|
||||||
# Translations |
|
||||||
*.mo |
|
||||||
*.pot |
|
||||||
|
|
||||||
# Django stuff: |
|
||||||
*.log |
|
||||||
local_settings.py |
|
||||||
db.sqlite3 |
|
||||||
db.sqlite3-journal |
|
||||||
|
|
||||||
# Flask stuff: |
|
||||||
instance/ |
|
||||||
.webassets-cache |
|
||||||
|
|
||||||
# Scrapy stuff: |
|
||||||
.scrapy |
|
||||||
|
|
||||||
# Sphinx documentation |
|
||||||
docs/_build/ |
|
||||||
|
|
||||||
# PyBuilder |
|
||||||
.pybuilder/ |
|
||||||
target/ |
|
||||||
|
|
||||||
# Jupyter Notebook |
|
||||||
.ipynb_checkpoints |
|
||||||
|
|
||||||
# IPython |
|
||||||
profile_default/ |
|
||||||
ipython_config.py |
|
||||||
|
|
||||||
# pyenv |
|
||||||
# For a library or package, you might want to ignore these files since the code is |
|
||||||
# intended to run in multiple environments; otherwise, check them in: |
|
||||||
# .python-version |
|
||||||
|
|
||||||
# pipenv |
|
||||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. |
|
||||||
# However, in case of collaboration, if having platform-specific dependencies or dependencies |
|
||||||
# having no cross-platform support, pipenv may install dependencies that don't work, or not |
|
||||||
# install all needed dependencies. |
|
||||||
#Pipfile.lock |
|
||||||
|
|
||||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow |
|
||||||
__pypackages__/ |
|
||||||
|
|
||||||
# Celery stuff |
|
||||||
celerybeat-schedule |
|
||||||
celerybeat.pid |
|
||||||
|
|
||||||
# SageMath parsed files |
|
||||||
*.sage.py |
|
||||||
|
|
||||||
# Environments |
|
||||||
.env |
|
||||||
.venv |
|
||||||
env/ |
|
||||||
venv/ |
|
||||||
ENV/ |
|
||||||
env.bak/ |
|
||||||
venv.bak/ |
|
||||||
|
|
||||||
# Spyder project settings |
|
||||||
.spyderproject |
|
||||||
.spyproject |
|
||||||
|
|
||||||
# Rope project settings |
|
||||||
.ropeproject |
|
||||||
|
|
||||||
# mkdocs documentation |
|
||||||
/site |
|
||||||
|
|
||||||
# mypy |
|
||||||
.mypy_cache/ |
|
||||||
.dmypy.json |
|
||||||
dmypy.json |
|
||||||
|
|
||||||
# Pyre type checker |
|
||||||
.pyre/ |
|
||||||
|
|
||||||
# pytype static type analyzer |
|
||||||
.pytype/ |
|
||||||
|
|
||||||
# Cython debug symbols |
|
||||||
cython_debug/ |
|
||||||
app.db |
|
||||||
.idea |
|
||||||
.flaskenv |
|
||||||
migrations |
|
@ -1,15 +0,0 @@ |
|||||||
from flask import Flask |
|
||||||
from config import Config |
|
||||||
from flask_sqlalchemy import SQLAlchemy |
|
||||||
from flask_migrate import Migrate |
|
||||||
from flask_login import LoginManager |
|
||||||
|
|
||||||
app = Flask(__name__) |
|
||||||
app.config.from_object(Config) |
|
||||||
login = LoginManager(app) |
|
||||||
db = SQLAlchemy(app) |
|
||||||
migrate = Migrate(app, db) |
|
||||||
login = LoginManager(app) |
|
||||||
login.login_view = 'login' |
|
||||||
|
|
||||||
from app import routes |
|
@ -1,30 +0,0 @@ |
|||||||
from flask_wtf import FlaskForm |
|
||||||
from wtforms import StringField, PasswordField, BooleanField, SubmitField |
|
||||||
from wtforms.validators import ValidationError, DataRequired, Email, EqualTo |
|
||||||
from app.models import User |
|
||||||
|
|
||||||
|
|
||||||
class LoginForm(FlaskForm): |
|
||||||
username = StringField('Username', validators=[DataRequired()]) |
|
||||||
password = PasswordField('Password', validators=[DataRequired()]) |
|
||||||
remember_me = BooleanField('Remember Me') |
|
||||||
submit = SubmitField('Sign In') |
|
||||||
|
|
||||||
|
|
||||||
class RegistrationForm(FlaskForm): |
|
||||||
username = StringField('Username', validators=[DataRequired()]) |
|
||||||
email = StringField('Email', validators=[DataRequired(), Email()]) |
|
||||||
password = PasswordField('Password', validators=[DataRequired()]) |
|
||||||
password2 = PasswordField( |
|
||||||
'Repeat Password', validators=[DataRequired(), EqualTo('password')]) |
|
||||||
submit = SubmitField('Register') |
|
||||||
|
|
||||||
def validate_username(self, username): |
|
||||||
user = User.query.filter_by(username=username.data).first() |
|
||||||
if user is not None: |
|
||||||
raise ValidationError('Please use a different username.') |
|
||||||
|
|
||||||
def validate_email(self, email): |
|
||||||
user = User.query.filter_by(email=email.data).first() |
|
||||||
if user is not None: |
|
||||||
raise ValidationError('Please use a different email address.') |
|
@ -1,27 +0,0 @@ |
|||||||
from datetime import datetime |
|
||||||
from app import db |
|
||||||
from werkzeug.security import generate_password_hash, check_password_hash |
|
||||||
from flask_login import UserMixin |
|
||||||
from app import login |
|
||||||
|
|
||||||
|
|
||||||
class User(UserMixin, db.Model): |
|
||||||
id = db.Column(db.Integer, primary_key=True) |
|
||||||
username = db.Column(db.String(64), index=True, unique=True) |
|
||||||
email = db.Column(db.String(120), index=True, unique=True) |
|
||||||
password_hash = db.Column(db.String(128)) |
|
||||||
# posts = db.relationship('Post', backref='author', lazy='dynamic') |
|
||||||
|
|
||||||
def __repr__(self): |
|
||||||
return '<User {}>'.format(self.username) |
|
||||||
|
|
||||||
def set_password(self, password): |
|
||||||
self.password_hash = generate_password_hash(password) |
|
||||||
|
|
||||||
def check_password(self, password): |
|
||||||
return check_password_hash(self.password_hash, password) |
|
||||||
|
|
||||||
|
|
||||||
@login.user_loader |
|
||||||
def load_user(id): |
|
||||||
return User.query.get(int(id)) |
|
@ -1,55 +0,0 @@ |
|||||||
from app import app |
|
||||||
from app import db |
|
||||||
from app.forms import LoginForm, RegistrationForm |
|
||||||
from app.models import User |
|
||||||
from flask import render_template, flash, redirect, url_for |
|
||||||
from flask_login import current_user, login_user, logout_user |
|
||||||
from flask_login import login_required |
|
||||||
|
|
||||||
|
|
||||||
@app.route('/') |
|
||||||
@app.route('/index') |
|
||||||
def index(): |
|
||||||
return "Hello, World!" |
|
||||||
|
|
||||||
|
|
||||||
@app.route('/register', methods=['GET', 'POST']) |
|
||||||
def register(): |
|
||||||
if current_user.is_authenticated: |
|
||||||
return redirect(url_for('index')) |
|
||||||
form = RegistrationForm() |
|
||||||
if form.validate_on_submit(): |
|
||||||
user = User(username=form.username.data, email=form.email.data) |
|
||||||
user.set_password(form.password.data) |
|
||||||
db.session.add(user) |
|
||||||
db.session.commit() |
|
||||||
flash('Congratulations, you are now a registered user!') |
|
||||||
return redirect(url_for('login')) |
|
||||||
return render_template('register.html', title='Register', form=form) |
|
||||||
|
|
||||||
|
|
||||||
@app.route('/login', methods=['GET', 'POST']) |
|
||||||
def login(): |
|
||||||
if current_user.is_authenticated: |
|
||||||
return redirect(url_for('index')) |
|
||||||
form = LoginForm() |
|
||||||
if form.validate_on_submit(): |
|
||||||
user = User.query.filter_by(username=form.username.data).first() |
|
||||||
if user is None or not user.check_password(form.password.data): |
|
||||||
flash('Invalid username or password') |
|
||||||
return redirect(url_for('login')) |
|
||||||
login_user(user, remember=form.remember_me.data) |
|
||||||
return redirect(url_for('admin')) |
|
||||||
return render_template('login.html', title='Sign In', form=form) |
|
||||||
|
|
||||||
|
|
||||||
@app.route('/admin') |
|
||||||
@login_required |
|
||||||
def admin(): |
|
||||||
return "Hello, World!" |
|
||||||
|
|
||||||
|
|
||||||
@app.route('/logout') |
|
||||||
def logout(): |
|
||||||
logout_user() |
|
||||||
return redirect(url_for('index')) |
|
@ -1,54 +0,0 @@ |
|||||||
<!DOCTYPE html> |
|
||||||
<html lang="tr"> |
|
||||||
|
|
||||||
<head> |
|
||||||
<meta charset="utf-8"> |
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=EDGE"> |
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|
||||||
<meta name="description" content="Dilde Başlar"> |
|
||||||
<meta name="author" content="Özgür Yazılım Derneği"> |
|
||||||
|
|
||||||
<title>dildeBaslar</title> |
|
||||||
|
|
||||||
<!-- Bootstrap CSS --> |
|
||||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous"> |
|
||||||
|
|
||||||
<!-- Font Awesome --> |
|
||||||
<!-- This link is restricted. You will need your own Font Awesome link if deploying to anywhere other than localhost --> |
|
||||||
<link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.15.1/css/all.css" integrity="sha384-9ZfPnbegQSumzaE7mks2IYgHoayLtuto3AS6ieArECeaR8nCfliJVuLh/GaQ1gyM" crossorigin="anonymous"> |
|
||||||
|
|
||||||
<!-- Custom CSS --> |
|
||||||
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='/css/custom.css')}}"> |
|
||||||
|
|
||||||
</head> |
|
||||||
<body> |
|
||||||
{% with messages = get_flashed_messages() %} |
|
||||||
{% if messages %} |
|
||||||
<ul class=flashes> |
|
||||||
{% for message in messages %} |
|
||||||
<li>{{ message }}</li> |
|
||||||
{% endfor %} |
|
||||||
</ul> |
|
||||||
{% endif %} |
|
||||||
{% endwith %} |
|
||||||
{% block body %}{% endblock %} |
|
||||||
<div> |
|
||||||
Microblog: |
|
||||||
<a href="{{ url_for('index') }}">Home</a> |
|
||||||
{% if current_user.is_anonymous %} |
|
||||||
<a href="{{ url_for('login') }}">Login</a> |
|
||||||
{% else %} |
|
||||||
<a href="{{ url_for('logout') }}">Logout</a> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
<div class="container" align="center"> |
|
||||||
|
|
||||||
<div class="jumbotron text-center" style="width: 50% ;"> |
|
||||||
<h1>dildeBaşlar</h1> |
|
||||||
<p>dildeBaşlar, metinlerdeki hak ihlallerini tespit edip olması gereken kullanımları ve açıklamalarını gösteren hak temelli bir redaktördür.</p> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
{% block content %}{% endblock %} |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,26 +0,0 @@ |
|||||||
{% extends "base.html" %} |
|
||||||
|
|
||||||
{% block content %} |
|
||||||
<h1>Hi, {{ current_user.username }}!</h1> |
|
||||||
<h1>Sign In</h1> |
|
||||||
<form action="" method="post" novalidate> |
|
||||||
{{ form.hidden_tag() }} |
|
||||||
<p> |
|
||||||
{{ form.username.label }}<br> |
|
||||||
{{ form.username(size=32) }}<br> |
|
||||||
{% for error in form.username.errors %} |
|
||||||
<span style="color: red;">[{{ error }}]</span> |
|
||||||
{% endfor %} |
|
||||||
</p> |
|
||||||
<p> |
|
||||||
{{ form.password.label }}<br> |
|
||||||
{{ form.password(size=32) }}<br> |
|
||||||
{% for error in form.password.errors %} |
|
||||||
<span style="color: red;">[{{ error }}]</span> |
|
||||||
{% endfor %} |
|
||||||
</p> |
|
||||||
<p>{{ form.remember_me() }} {{ form.remember_me.label }}</p> |
|
||||||
<p>{{ form.submit() }}</p> |
|
||||||
<p>New User? <a href="{{ url_for('register') }}">Click to Register!</a></p> |
|
||||||
</form> |
|
||||||
{% endblock %} |
|
@ -1,38 +0,0 @@ |
|||||||
{% extends "base.html" %} |
|
||||||
|
|
||||||
{% block content %} |
|
||||||
<h1>Hi, {{ current_user.username }}!</h1> |
|
||||||
<h1>Register</h1> |
|
||||||
<form action="" method="post"> |
|
||||||
{{ form.hidden_tag() }} |
|
||||||
<p> |
|
||||||
{{ form.username.label }}<br> |
|
||||||
{{ form.username(size=32) }}<br> |
|
||||||
{% for error in form.username.errors %} |
|
||||||
<span style="color: red;">[{{ error }}]</span> |
|
||||||
{% endfor %} |
|
||||||
</p> |
|
||||||
<p> |
|
||||||
{{ form.email.label }}<br> |
|
||||||
{{ form.email(size=64) }}<br> |
|
||||||
{% for error in form.email.errors %} |
|
||||||
<span style="color: red;">[{{ error }}]</span> |
|
||||||
{% endfor %} |
|
||||||
</p> |
|
||||||
<p> |
|
||||||
{{ form.password.label }}<br> |
|
||||||
{{ form.password(size=32) }}<br> |
|
||||||
{% for error in form.password.errors %} |
|
||||||
<span style="color: red;">[{{ error }}]</span> |
|
||||||
{% endfor %} |
|
||||||
</p> |
|
||||||
<p> |
|
||||||
{{ form.password2.label }}<br> |
|
||||||
{{ form.password2(size=32) }}<br> |
|
||||||
{% for error in form.password2.errors %} |
|
||||||
<span style="color: red;">[{{ error }}]</span> |
|
||||||
{% endfor %} |
|
||||||
</p> |
|
||||||
<p>{{ form.submit() }}</p> |
|
||||||
</form> |
|
||||||
{% endblock %} |
|
@ -1,9 +0,0 @@ |
|||||||
import os |
|
||||||
basedir = os.path.abspath(os.path.dirname(__file__)) |
|
||||||
|
|
||||||
|
|
||||||
class Config(object): |
|
||||||
SECRET_KEY = os.environ.get('SECRET_KEY') or 'xxx' |
|
||||||
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \ |
|
||||||
'sqlite:///' + os.path.join(basedir, 'app.db') |
|
||||||
SQLALCHEMY_TRACK_MODIFICATIONS = False |
|
@ -1 +0,0 @@ |
|||||||
from app import app |
|
Loading…
Reference in new issue