การสร้าง Headless CMS API โดยใช้ Flask

CMS API โดยใช้ Flask สมมติว่าคุณต้องการเริ่มต้นบล็อกหรือแสดงผลิตภัณฑ์และบริการของคุณบนเว็บไซต์ ทางเลือกหนึ่งคือสร้างทุกอย่างตั้งแต่เริ่มต้นโดยใช้ HTML, CSS และ JavaScript สิ่งนี้จะต้องมีการสร้างฐานข้อมูล การเข้าสู่ระบบของผู้ดูแลระบบ และอินเทอร์เฟซเพื่อให้คุณสามารถเข้าสู่ระบบและอัปเดตข้อมูลได้ เนื่องจากต้องใช้ความพยายามอย่างมาก คุณจึงควรใช้ระบบจัดการเนื้อหา (CMS) ที่ได้รับการพิสูจน์แล้ว หากคุณไม่คุ้นเคยกับการเขียนโปรแกรม CMS มีเครื่องมือทั้งหมดที่จำเป็นในการจัดการเนื้อหาและนำเค้าโครงต่างๆ ไปใช้กับเว็บไซต์ตั้งแต่แกะกล่อง

มี CMS ที่แตกต่างกันมากมายเช่น WordPress, Wix, Contentful หรือ Squarespace ซึ่งสามารถใช้สร้างเว็บไซต์และเว็บแอปพลิเคชันได้ CMS จัดเตรียมอินเทอร์เฟซการแก้ไขภาพ เทมเพลต โค้ดที่กำหนดเอง และความสามารถในการจัดการเนื้อหาอื่นๆ ทั้งหมดจากสภาพแวดล้อมเดียว WordPress หนึ่งในตัวเลือกที่ทรงพลังที่สุด มีปลั๊กอินมากมายเพื่อขยายพฤติกรรมและแนะนำความสามารถด้านอีคอมเมิร์ซที่ทรงพลัง

ทีนี้ คำถามต่อไปก็เกิดขึ้น: CMS แบบไม่มีหัวคืออะไร ?

CMS หัวขาดคืออะไร?

ดังนั้นเราจึงใช้ CMS มาประมาณ 20 ปีแล้ว อย่างไรก็ตาม โลกเปลี่ยนไปมาก ยุคอุปกรณ์พกพาในปัจจุบันได้เห็นการเติบโตอย่างมากในด้านใหม่ๆ เช่น IoT บอท ความช่วยเหลือด้านดิจิทัล และ VR อย่างไรก็ตาม CMS แบบดั้งเดิมไม่ได้สร้างขึ้นสำหรับแพลตฟอร์มล้ำสมัยเหล่านี้

ในปัจจุบันนี้ เนื้อหาต้องแสดงบนอุปกรณ์ต่างๆ ในรูปแบบต่างๆ เนื่องจาก CMS แบบเดิมไม่ได้พัฒนาขึ้นเพื่อจุดประสงค์นี้ เราจึงต้องการระบบการจัดการเนื้อหาแบบไคลเอ็นต์-ไม่เชื่อเรื่องพระเจ้ารูปแบบใหม่ นี่คือที่มาของ CMS ที่ไม่มีหัว

CMS ที่ไม่มีหัวจะเน้นที่กระบวนการแบ็กเอนด์ในการจัดการเนื้อหาเท่านั้น ไม่ได้ควบคุมลักษณะการนำเสนอส่วนหน้า แต่ CMS ที่ไม่มีส่วนหัวจะใช้ API เพื่อจัดเตรียมเนื้อหาให้กับช่องปลายทาง ด้วยวิธีนี้ CMS ที่ไม่มีส่วนหัวจะถูกแยกออกจากไคลเอนต์ (“หัว”) ดังนั้นจึงไม่มีส่วนหัว การใช้ API เพื่อแยกข้อกังวลหมายความว่าเนื้อหาของคุณจะถูกส่งไปยังแพลตฟอร์มใดก็ได้ อาจเป็นเว็บไซต์เชิงมุม แอปพลิเคชันมือถือ หรือแม้แต่สมาร์ตวอทช์

ข้อดีของ CMS ที่ไม่มีหัว

  • มีความปลอดภัยมากกว่าเมื่อเทียบกับ CMS แบบเดิม
  • นอกจากนี้ยังมีขนาดเล็กกว่า
  • เร็วกว่า CMS ทั่วไป
  • ช่วยให้คุณเลือกภาษาใดก็ได้สำหรับการพัฒนาส่วนหน้า
  • ช่วยให้คุณสามารถเผยแพร่เนื้อหาของคุณไปยังแพลตฟอร์มต่างๆ

ข้อเสียของ CMS หัวขาด

  • คุณต้องจัดการสองส่วนพร้อมกัน — ส่วนหลังและส่วนหน้า
  • คุณจะต้องมีโครงสร้างพื้นฐานที่แตกต่างไปจากเดิมอย่างสิ้นเชิงเพื่อดูแลส่วนหน้า
  • การบำรุงรักษาอาจมีราคาแพงกว่า CMS แบบเดิม

CMS หัวขาดยอดนิยมบางตัว

  • โดยตรง
  • ปริซึม
  • เนื้อหา Kentico
  • Bloomreach
  • แมกโนเลีย

ตอนนี้เราเข้าใจแล้วว่า CM ที่ไม่มีหัวคืออะไร มาเรียนรู้วิธีสร้างกัน ในคำแนะนำนี้ เราจะสร้าง CMS ที่ไม่มีส่วนหัวโดยใช้ Flask และ MySQL

ข้อกำหนดเบื้องต้น

  • Python
  • MySQL
  • กระติกน้ำ
  • โปรแกรมแก้ไขโค้ดเช่น VS Code
  • MySQL
  • SQLalchemy

ขั้นตอน – 1: การตั้งค่า

เปิดเทอร์มินัลของคุณและสร้างโฟลเดอร์ใหม่โดยใช้คำmkdirสั่ง เรากำลังใช้cmsเป็นชื่อโฟลเดอร์:

mkdir cms

ตอนนี้เปิดโฟลเดอร์:

cd cms
virtualenv .
pipenv install flask flask-sqlalchemy flask-cors

ตอนนี้เราต้องสร้างไฟล์และโฟลเดอร์ต่างๆ ภายในโฟลเดอร์รูท เพื่อประโยชน์ของการฝึกปฏิบัตินี้ ให้สร้างโครงสร้างนี้จากห้าโฟลเดอร์และหนึ่งไฟล์:

  • บล็อก
  • เข้าสู่ระบบ
  • แท็ก
  • blog_tags
  • ผู้ใช้
  • __init__.py

ตอนนี้สร้างไฟล์ Python ด้วย โครงสร้างโฟลเดอร์สุดท้ายจะต้องเป็นดังนี้:

  • บล็อก
    – blog_model.py
    – blog_routes.py
  • เข้าสู่ระบบ
    – login_route.py
  • แท็ก
    – tag_model.py
  • blog_tags
    – blog_tag_table.py
  • ผู้ใช้
    – user_model.py

เมื่อคุณสร้างโครงสร้างโครงการแล้ว ให้ติดตั้งFlaskและvirtualenv. เราได้กล่าวถึงวิธีตั้งค่า Flask ไปแล้วในบทความที่แล้ว คุณสามารถตรวจสอบได้ที่นี่แล้วทำตามขั้นตอนต่อไป

มาติดตั้ง flask-sqlalchemy กัน บนเทอร์มินัลของคุณ ให้วางคำสั่งด้านล่าง:

python3 -m pip install flask-sqlalchemy

อะไรกันแน่flask-sqlalchemy? มันเป็นส่วนขยาย Flask ที่เพิ่มการรองรับsqlalchemyและทำให้งาน MySQL จำนวนมากง่ายขึ้น มันใช้ Object Relational Mapping (ORM) ทำให้คุณเรียกใช้การสืบค้นได้ง่ายขึ้นโดยไม่ต้องจดคำสั่ง SQL ดิบ

กำลังเริ่มต้น

เมื่อติดตั้งการพึ่งพาทั้งหมดแล้วก็ถึงเวลาเขียนโค้ด ดังนั้น เปิดcms/__init__.pyโปรแกรมแก้ไขโค้ดของคุณแล้ววางโค้ดด้านล่าง:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS

db = SQLAlchemy()

def create_app():
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///flaskdatabase.db'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    CORS(app)

    db.init_app(app)

    return app

คำอธิบาย:

ที่นี่ เราได้สร้างฟังก์ชันที่เรียกว่าcreate_app()ซึ่งโดยพื้นฐานแล้วจะเริ่มต้นแอปพลิเคชันและฐานข้อมูลของเราพร้อมๆ กัน ซึ่งเราสามารถใช้ที่ใดก็ได้ในโค้ด

ขั้นตอน – 2: ตั้งค่าฐานข้อมูล

ในขั้นตอนนี้ เราจะสร้างตารางสำหรับ CMS ที่ไม่มีส่วนหัว ตารางเหล่านี้จะจัดเก็บข้อมูลทั้งหมดที่เราจะเผยแพร่ผ่าน CMS ของเรา เราจะเริ่มต้นด้วยตารางบล็อกซึ่งจะมีคอลัมน์: idtitletextdate_of_publishimagetags. หากคุณต้องการ คุณสามารถเพิ่มคอลัมน์อื่นๆ ได้หากต้องการ แต่สำหรับตอนนี้ เพื่อความง่าย เราแค่สร้างคอลัมน์พื้นฐานซึ่งมีอยู่ใน CMS ส่วนใหญ่

ตอนนี้เปิด Blog/blog_model.py และวางรหัสด้านล่าง:

from cms import db
from datetime import datetime
from cms.blog_tags.blog_tag_table import tag_blog

tags=db.relationship('Tag',secondary=tag_blog,backref=db.backref('blogs_associated',lazy="dynamic"))

class Blog(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    title=db.Column(db.String(50),nullable=False)
    text=db.Column(db.Text,nullable=False)
    image= db.Column(db.String,nullable=False)
    date_of_publish = db.Column(db.DateTime, default=datetime.utcnow)

    @property
    def serialize(self):
        return {
            'id': self.id,
            'title': self.title,
            text: self.text,
            image: self.image,
            date_of_publish: self.date_of_publish,
        }

คำอธิบาย:

เรากำลังนำเข้าโมดูลต่างๆ เช่นdbสำหรับการเชื่อมต่อฐานข้อมูล และdatetimeการประทับเวลา เราได้สร้างแบบจำลองBlogและกำหนดฟิลด์ทั้งหมดในนั้น มีฟังก์ชันที่เรียกว่าserialize(self)ซึ่งใช้เพื่อส่งคืนข้อมูลทั้งหมดในรูปแบบ JSON

คุณอาจสังเกตเห็นว่าเรายังไม่ได้กำหนดแท็กที่นี่ใช่ไหม เนื่องจากtagsเป็นคีย์นอกที่จะมาจากตารางที่เรียกว่า tags. โดยทั่วไป หนึ่งโพสต์สามารถมีแท็กได้หลายแท็ก และหนึ่งแท็กสามารถเชื่อมโยงกับโพสต์บล็อกหลายรายการ

ตอนนี้เปิด cms/Tag/tag_model.py และวางรหัสด้านล่าง:

from cms import db

class Tag(db.Model):
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(20))
    @property
    def serialize(self):
        return {
        'id': self.id,
        'name': self.name     
        }

คำอธิบาย:

เราได้กำหนดโมเดลด้วย id และ name คอลัมน์ เนื่องจากแท็กไม่ต้องการมากกว่าคอลัมน์เหล่านี้

เมื่อสร้างโมเดลเสร็จแล้ว ก็ถึงเวลาสร้างตารางเช่นกัน ดังนั้นให้เปิดไฟล์ cms/blog_tags/blog_tag_table.py และวางโค้ดด้านล่าง:

from cms import db

tag_blog = db.Table('tag_blog',
    db.Column('tag_id',db.Integer,db.ForeignKey('tag.id'), primary_key=True),
    db.Column('blog_id', db.Integer,db.ForeignKey('blog.id'),primary_key=True)
)

คำอธิบาย:

ตารางนี้เก็บความสัมพันธ์ระหว่างตารางบล็อกและตารางแท็กที่tag_idแมปblog_idด้วย

ขั้นตอนที่ -3: การเพิ่มพิมพ์เขียว:

ตอนนี้เราต้องแก้ไขไฟล์Blog/blog_routes.pyและเพิ่มโค้ดด้านล่าง:

blogs= Blueprint('blogs',__name__)

เปิด cms/ __init__.pyและเพิ่มโค้ดด้านล่าง:

from cms.Blog.blog_routes import blogs
app.register_blueprint(blogs)

คำอธิบาย:

เรากำลังเพิ่มพิมพ์เขียวที่นี่ ช่วยให้เราแบ่งแอปพลิเคชันออกเป็นส่วนประกอบขนาดเล็กที่สามารถนำกลับมาใช้ใหม่ได้ทุกที่ ที่นี่เราได้กำหนด blogs เป็นพิมพ์เขียว

ขั้นตอน –4: การสร้างเส้นทางสำหรับการเผยแพร่บล็อกโพสต์

ตอนนี้เปิดของคุณ blog_routes.py และเพิ่มรหัสด้านล่าง:

from flask import Blueprint,request,jsonify,make_response
from flask_jwt_extended import jwt_required
from cms import db
from cms.Blog.blog_model import Blog
from cms.Tag.tag_model import Tag

blogs= Blueprint('blogs',__name__)
@blogs.route('/add_post',methods=["POST"])
def create_blog():
    data = request.get_json()

    new_blog=Blog(title=data["title"],content=data["content"],image=data["image"])

    for tag in data["tags"]:
        current_tag=Tag.query.filter_by(name=tag).first()
        if(current_tag):
            current_tag.blogs_associated.append(new_blog)
        else:
            new_tag=Tag(name=tag)
            new_tag.blogs_associated.append(new_blog)
            db.session.add(new_tag)
            

    db.session.add(new_blog)
    db.session.commit()

    blog_id = getattr(new_blog, "id")
    return jsonify({"id": blog_id})

คำอธิบาย:

เราได้สร้างเส้นทาง/blog_postซึ่งเรียกใช้ฟังก์ชันที่จะcreate_blog()สร้าง โดยทั่วไปแล้วฟังก์ชันนี้ใช้ในการสร้างโพสต์บล็อกและยอมรับชื่อ ข้อความ รูปภาพ และแท็ก เรากำลังดำเนินการวนรอบที่สามารถรับแท็กได้หลายแท็ก และหากไม่มีแท็ก แท็กนั้นจะสร้างแท็กใหม่และเชื่อมโยงกับโพสต์ในบล็อก CMS API โดยใช้ Flask

ขั้นตอนที่ –5: การสร้างเส้นทางเพื่อดึงข้อมูลโพสต์ในบล็อก:

เราจะสร้างสองเส้นทางที่แตกต่างกันเพื่อดึงข้อมูลโพสต์ในบล็อก เส้นทางหนึ่งจะดึงข้อมูลโพสต์ในบล็อกทั้งหมด ในขณะที่อีกเส้นทางหนึ่งจะใช้เพื่อดึงข้อมูลโพสต์บนบล็อกโดยidใช้ สามารถใช้เพื่อค้นหาโพสต์ในบล็อกเมื่อผู้ใช้เปิดโพสต์บล็อกแบบเต็ม ตอนนี้เปิด blog_routes.py และวางรหัสด้านล่าง:

@blogs.route('/blogs',methods=["GET"])
def get_all_blogs():
    blogs= Blog.query.all()
    serialized_data = []
    for blog in blogs:
        serialized_data.append(blog.serialize)

    return jsonify({"all_blogs": serialized_data})

คำอธิบาย:

เราได้กำหนดเส้นทาง /blogs ซึ่งเรียก SELECT ใช้แบบสอบถามโดยใช้ ORM และส่งคืน JSON ที่มีโพสต์บล็อกทั้งหมดและข้อมูลของพวกเขาภายใต้ all_blogs คีย์

ตอนนี้เพื่อดึงบล็อกโพสต์ด้วยidการวางโค้ดด้านล่างนี้โดยเฉพาะ:

@blogs.route('/blog/<int:id>',methods=["GET"])
def get_single_blog(id):
    blog = Blog.query.filter_by(id=id).first()
    serialized_blog = blog.serialize
    serialized_blog["tags"] = []

    for tag in blog.tags:
        serialized_blog["tags"].append(tag.serialize)

    return jsonify({"single_blog": serialized_blog})

คำอธิบาย:

เราได้กำหนดเส้นทางอื่น /blog ซึ่งยอมรับค่าจำนวนเต็มและส่งคืนข้อมูลบล็อกทั้งหมดใน JSON ภายใต้ single_blog คีย์

ขั้นตอนที่ –6: การสร้างเส้นทางเพื่อลบโพสต์ในบล็อก:

จนถึงตอนนี้เราได้กล่าวถึงวิธีการสร้างบล็อกแล้ว ต่อไปนี้คือวิธีการลบโพสต์ในบล็อก ใน ให้blog_routes.pyวางโค้ดด้านล่าง:

@blogs.route('/delete_post/<int:id>', methods=["DELETE"])
def delete_post(id):
    blog = Blog.query.filter_by(id=id).first()
    db.session.delete(blog)
    db.session.commit()

    return jsonify("Blog was deleted"),200

คำอธิบาย:

ที่นี่ เราได้กำหนดเส้นทาง /delete_post ซึ่งยอมรับการ id โพสต์บล็อกและเรียกใช้แบบสอบถามการลบสำหรับบล็อกที่ id เกี่ยวข้อง

ขั้นตอนที่ –7: การสร้างเส้นทางเพื่ออัปเดตโพสต์ในบล็อก:

ในการอัปเดตบล็อกโพสต์ เราจะใช้PUTวิธีที่นี่ ซึ่งจะใช้บล็อกidเป็นพารามิเตอร์อินพุต ดังนั้นใน blog_routes.py การเพิ่มรหัสด้านล่าง:

@blogs.route('/update_post/<int:id>', methods=["PUT"])
def update_post(id):
    data = request.get_json()
    blog=Blog.query.filter_by(id=id).first_or_404()

    blog.title = data["title"]
    blog.text=data["text"]
    blog.image=data["image"]

    updated_blog = blog.serialize

    db.session.commit()
    return jsonify({"blog_id": blog.id})

คำอธิบาย:

เราได้เพิ่มเส้นทางเข้าไปอีกเส้นทางหนึ่ง /update_post ซึ่งใช้ PUT วิธีดังกล่าวและเรียกใช้ UPDATE แบบสอบถามในบล็อกที่ส่ง id ผ่าน

ขั้นตอนที่ –8: การเพิ่มผู้ใช้ผู้ดูแลระบบและเส้นทางการเข้าสู่ระบบ:

ตอนนี้เราได้กำหนดเส้นทางทั้งหมดที่สามารถดำเนินการ CRUD ในบล็อกโพสต์แล้ว แต่เรายังต้องป้องกันการเข้าถึงโดยไม่ได้รับอนุญาตใช่ไหม เพื่อให้แน่ใจว่าไม่มีบุคคลที่ไม่ได้รับอนุญาตสามารถอัปเดตหรือเพิ่มโพสต์ในบล็อกได้

ก่อนอื่นเราจะสร้างโมเดลผู้ใช้ที่จะใช้เก็บข้อมูลผู้ใช้ ดังนั้น เปิดไฟล์ cms/User/user_model.py และวางโค้ดด้านล่าง:

from cms import db

class User(db.Model):
    id=db.Column(db.Integer,primary_key=True)
    email=db.Column(db.String(120),nullable=False)
    password=db.Column(db.String(120),nullable=False)

ที่นี่เราจะมีผู้ดูแลระบบเพียงคนเดียว ดังนั้นเราจึงไม่จำเป็นต้องสร้างเส้นทางสำหรับสิ่งนั้น ดังนั้นใน __init__.py ไฟล์ของคุณให้วางโค้ดด้านล่าง:

@click.command(name='add_admin')   
    @with_appcontext
    def add_admin():
        admin=User(email="ADMIN EMAIL",password="YOUR PASSWORD STRING")
        admin.password = generate_password_hash(admin.password,'sha256',salt_length=12)
        db.session.add(admin)
        db.session.commit()

    app.cli.add_command(add_admin)

และที่ด้านบน ให้เพิ่มโค้ดด้านล่าง:

import click
from flask.cli import with_appcontext
from werkzeug.security import generate_password_hash

คำอธิบาย:

ที่นี่เรากำลังจัดเก็บอีเมลและรหัสผ่านสำหรับผู้ใช้ที่เป็นผู้ดูแลระบบ ตอนนี้เราไม่สามารถจัดเก็บเป็นข้อความธรรมดาได้ ดังนั้นเราจึงใช้ SHA256 การแฮช

เมื่อทำส่วนข้างต้นเสร็จแล้ว เราต้องสร้างเส้นทางสำหรับเข้าสู่ระบบของผู้ดูแลระบบ ในการทำเช่นนั้น เราต้องเปิด Login/login_route.py ไฟล์และวางโค้ดด้านล่าง:

from flask import Blueprint,request,jsonify
from cms.User.user_model import User
from flask_jwt_extended import create_access_token
from werkzeug.security import check_password_hash 

login=Blueprint('login', __name__)

@login.route('/login', methods=["POST"])
def log_in():
    request_data = request.get_json()

    user=User.query.filter_by(email=request_data["email"]).first()
    if user:
        if check_password_hash(user.password,request_data["password"]):
            jwt_token=create_access_token(identity=user.email)
            return jsonify({"token":jwt_token})
    else:
        return "Invalid email or password",400

คำอธิบาย:

ที่นี่เราได้กำหนดเส้นทาง /login ซึ่งจะใช้อีเมลและรหัสผ่าน เมื่อทั้งสองถูกต้องแล้ว จะส่งคืนโทเค็น JWT ที่คุณสามารถใช้ส่งคำขอครั้งต่อไปได้

ขั้นตอนที่ -9: การนำ JWT ไปใช้:

ตอนนี้เราได้เพิ่มผู้ดูแลระบบแล้ว และส่วนการเข้าสู่ระบบก็เสร็จสิ้นเช่นกัน แต่เพื่อให้ปลอดภัยยิ่งขึ้น เราจะใช้ JWT add_postและupdate_post เพื่อป้องกันการเข้าถึงโดยไม่ได้รับอนุญาต บนเทอร์มินัลของคุณ ให้วางโค้ดด้านล่าง:

pipenv install flask-jwt-extended

สิ่งนี้จะติดตั้ง JWT ซึ่งคุณสามารถใช้เพื่อใช้งาน JWT

ตอนนี้เปิด__init__.pyและวางโค้ดด้านล่าง:

app.config['JWT_SECRET_KEY']=ADD YOUR SECRET STRING HERE
jwt=JWTManager(app)

ตอนนี้เปิดไฟล์ Blog_routes.py และอัปเดตเส้นทางด้านล่าง:

@blogs.route('/delete_post/<int:id>', methods=["DELETE"])
@jwt_required
def delete_post(id):
    blog = Blog.query.filter_by(id=id).first()
    db.session.delete(blog)
    db.session.commit()

    return jsonify("Blog was deleted"),200

ในทำนองเดียวกันเพิ่ม @jwt_required ด้านล่างบรรทัด @blogs.route('/add_post',methods=["POST"])

ขั้นตอนที่ -10: สิ้นสุดการตั้งค่า:

ในท้ายที่สุดคุณ cms/__init__.py ควรมีลักษณะดังนี้:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS
import click
from flask.cli import with_appcontext
from flask_jwt_extended import JWTManager
from werkzeug.security import generate_password_hash

db = SQLAlchemy()

def create_app():
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///flaskdatabase.db'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    CORS(app)
    db.init_app(app)
    app.config['JWT_SECRET_KEY']='YOUR_SECRET_KEY'
    jwt=JWTManager(app)

    from cms.Blog.blog_routes import blogs
    app.register_blueprint(blogs)

    from cms.User.user_model import User

    from cms.Login.login_route import login
    app.register_blueprint(login)

    from cms.Tag.tag_model import Tag

    
    @click.command(name='create_admin')   
    @with_appcontext
    def create_admin():
        admin=User(email="ANY_EMAIL",password="ANY_PASSWORD")
        admin.password = generate_password_hash(admin.password,'sha256',salt_length=12)
        db.session.add(admin)
        db.session.commit()

    app.cli.add_command(create_admin)

    

    return app

เมื่อคุณทำทุกอย่างเสร็จแล้ว คุณเพียงแค่เรียกใช้คำสั่งด้านล่างเพื่อให้ฐานข้อมูลทำงาน วางบนเทอร์มินัลของคุณ:

python
from cms import db,create_app
db.create_all(app=create_app())

สิ่งนี้จะสร้างไฟล์ flaskdatabase.db ซึ่งประกอบด้วยตารางทั้งหมด ตอนนี้เพื่อเรียกใช้เซิร์ฟเวอร์ API ให้ใช้คำสั่ง:

set FLASK_APP=cms/__init__.py
set FLASK_DEBUG=1
set FLASK_ENV=development
flask create_admin
flask run

และบิงโก!!! คุณพร้อมที่จะทำการเรียก API เพื่อสร้างบล็อกโพสต์ คุณสามารถโคลนโค้ดสำเร็จรูปจากที่เก็บนี้

คำพูดสุดท้าย

ในบทความนี้ เราได้กล่าวถึงประเด็นต่างๆ มากมาย เช่น วิธีการเชื่อมต่อ SQL, วิธีเรียกใช้แบบสอบถาม SQL โดยใช้ SQLalchemy, การใช้งาน JWT และอื่นๆ ทั้งหมดเพื่อสร้าง CMS ที่ไม่มีส่วนหัว คุณสามารถพูดได้ว่านี่เป็นบทความแบบครบวงจร ซึ่งสามารถช่วยให้คุณเริ่มหยิบแนวคิดขั้นสูงใน Python-Flask

ทั้งนี้บริษัทเคแอนด์โอ จึงได้มุ่งเน้นการจัดการแก้ไขปัญหา จัดการเอกสาร ด้านเอกสารขององค์กรมาอย่างยาวนาน และ ให้ความสำคัญกับด้านงานเอกสาร ต่อลูกค้าเป็นอย่างดี จนถึงปัจจุบันก็ได้ความยอมรับจากองค์กร ขนาดใหญ่ ขนาดกลาง และขนาดเล็กมากมาย จึงใคร่ขออาสาดูและปัญหาด้านเอกสารให้กับองค์กรของท่านอย่างสุดความสามารถ เพราะเราเป็นหนึ่งในธุรกิจ ระบบจัดเก็บเอกสาร ที่ท่านไว้ใจได้

สอบถามได้สบายใจทั้ง เรื่องค่าบริการ ราคา และ งบประมาณ เพราะเป็นราคาที่สุด คุ้มที่สุด

เรามีแอดมินคอยคอบคำถาม 24 ชั้วโมงที่ Line OA ให้คำปรึกษาด้านวางระบบจัดการเอกสารอิเล็กทรอนิกส์  EDMS โดยทีมงานผู้เชี่ยวชาญจาก K&O

ที่มีประสบการณ์มากว่า 15 ปี รวมถึงซอฟต์แวร์ระดับโลก ติดต่อ 0 2 – 8 6 0 – 6 6 5 9 หรือ E m a i l : c s @ k o . i n . t h

หากท่านมีความสนใจ บทความ หรือ Technology สามารถติดต่อได้ตามเบอร์ที่ให้ไว้ด้านล่างนี้
Tel.086-594-5494
Tel.095-919-6699

Related Articles