Browse
Binding multiple databases

Key Point: Make sure both the database model and the database file you're trying to create matches names. For example, ExampleData == 'example_data'.

 


 

class ExampleData(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.String(500))
 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///something.db'
app.config['SQLALCHEMY_BINDS'] = {
    'example_data': 'sqlite:///example.db',  
}

 


Then, when working on the data in Python, you can create the database table via:


 

db.create_all(bind_key="quick_references_data")
CK Editor Setup

Ensure: You've configured a secret key

from flask_ckeditor import CKEditor
ckeditor = CKEditor(app)

 

Set the field in your forms.py

class ExampleForm(FlaskForm):
    name = StringField("name")
    content = CKEditorField("content")

 

HTML Example:

<section class="flex justify-center">
    <form method="post" class="flex flex-col items-center gap-2">
        {{ form.csrf_token }}
...
        {{form.submit}}
    </form>
</section>
{{ ckeditor.load() }}
{{ ckeditor.config(name='answer') }}
Configuring a secret key
import os
app.config['SECRET_KEY'] = os.urandom(24)
Creating requirements.txt
pip freeze > requirements.txt
Database migration
set FLASK_APP=app_name.py
flask db init  # Run if you haven't initialized migrations
flask db migrate  # Generates the migration scripts
flask db upgrade # Finalizes data migration
Flask Admin Setup

Assuming everything is set up:

  1. Database
  2. Database Model

 

from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
admin = Admin()
if __name__ == '__main__':
    admin.init_app(app)

 

In your models.py

admin.add_view(ModelView(ExampleData, db.session))

 


 

Then, navigate to 127.0.0.1:5000/admin

Flask Login Setup

Checklist

 

pip install flask-login flask-bcrypt

 

1. import LoginManager and Bcrypt, initialize them both. 

from flask_login import LoginManager
from flask_bcrypt import Bcrypt

bcrypt = Bcrypt(app)

login_manager = LoginManager(app)

 

2. Include a user loader with the data models.

from flask_template import db, admin, login_manager
from flask_login import UserMixin

 

@login_manager.user_loader
def load_user(user_id):
    return UsersData.query.filter_by(id=user_id).first()

 

3. Set up login/registration/logout routes and validate the forms.

from flask_login import login_user, logout_user, current_user

...

bcrypt.generate_password_hash
bcrypt.check_password_hash

 

4. Set routes to be required to be logged in via:

@login_required
Forms.py Setup
from wtforms import StringField, SubmitField
from flask_ckeditor import CKEditorField
from flask_wtf import FlaskForm

 

class ExampleForm(FlaskForm):
    title = StringField('Title')
    content = CKEditorField('Content')
    submit = SubmitField('Submit')

 

HTML:

 

<form method="post" class="flex flex-col items-center gap-2">
        {{ form.csrf_token }}
 
        {{ form.title.label }}
        <p>{{ form.title }}</p>
        {{ form.content.label }}
        <p>{{ form.content }}</p>
        {{form.submit}}
</form>

 

Routes.py:

crud = Blueprint('crud',__name__)
@crud.route("/crud_operations", methods=['GET', 'POST'])
def crud_db():
    datas = ExampleData.query.all()
    form = ExampleForm()
    if form.validate_on_submit():
        # Create a new UI_Library entry
        new_entry = ExampleData(
            title=form.title.data,
            content=form.content.data,
        )
 
        # Add and commit to the database
        db.session.add(new_entry)
        db.session.commit()
        return redirect(url_for("crud.crud_db"))

 
    return render_template('crud.html', datas = datas,  form = form)
Setting a jinja variable's class
{{ form.password(class_="border rounded-md")  }}
url_for()

CSS

<link href="{{ url_for('static', filename='css/output.css') }}" rel="stylesheet">

 

CSS FileCan’t use jinja in a CSS file. Needs a path.

body {
    background-image: url('../static/f.png');
}

 


 

Favicon

<link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='images/coding.png') }}">

 


 

JavaScript

<script src="{{ url_for('static', filename='js/jquery.js') }}"></script>

 

Passing to JavaScript

<small onclick="doSomething( {{ button.id }} )" class="hover:cursor-pointer">Do Something</small>

 

Note: Use back ticks to prevent issues with | safe , for example:

onclick="addLayout( `{{layout.code | safe }}` )"

 


 

Route Function Name

<a href="{{ url_for('html_resources.index', page=1) }}" class="nav-link">Resources</a>