Stundas uzdevums: Izvietot lietotni publiski un saprast pamata drošības principus produkcijas vidē.
70 min darba sadalījums: 1. uzdevums (~20 min) - atjauno teorijas piemēru vai minimālo prototipu; 2. uzdevums (~25 min) - pielieto to galvenajā uzdevumā; 3. uzdevums (~25 min) - pārbaudi rezultātu, izlabo kļūdas un tikai beigās pieraksti vienu secinājumu. Papildus/4. līmeņa uzdevums ir paredzēts tikai tad, ja pamatdarbs ir pabeigts.
Pirms sāc: izmanto iepriekš apgūto un šīs lapas teorijas/koda piemērus. Ja vajadzīga jauna komanda vai rīks, vispirms atrodi tās paraugu teorijas sadaļā.
Lokālā lietotne, kas darbojas uz localhost:5000, nav pieejama citiem. Lai pasaule to redzētu, jāizvieto mākonī.
Bezmaksas mākoņi (2026):
Drošības pamati:
.env.import os
from dotenv import load_dotenv
load_dotenv() # nolasa .env failu
DATABASE_URL = os.getenv("DATABASE_URL")
SECRET_KEY = os.getenv("SECRET_KEY")
Šis ir īss iesildīšanās uzdevums. Nokopē sagatavi, ielīmē to pareizajā koda vietā un palaid. Šeit pietiek droši izmēģināt tēmu 12.5 Izvietošana mākonī un drošība; detalizētu izpratni veidosi nākamajos uzdevumos.
Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.
import os
from dotenv import load_dotenv
load_dotenv() # nolasa .env failu
DATABASE_URL = os.getenv("DATABASE_URL")
SECRET_KEY = os.getenv("SECRET_KEY")
main.py failā un palaid no termināļa.Pievieno šīs stundas paņēmienu kā nelielu, strādājošu projekta daļu.
apstrada_gajienu(), rezultats vai routes.py.Pārbaudi, vai algoritms darbojas paredzami ar dažādiem datiem.
Ja pamatdarbs ir pabeigts, paplašini projektu ar vienu nelielu programmētu uzlabojumu.
.env!runtime.txt).DATABASE_URL izmanto SSL un pareizu psycopg2 sintakse (Render dod URL sākot ar postgres:// - pielāgo uz postgresql://).# app.py - produkcijai gatavs
import os
from flask import Flask, jsonify, request
import psycopg2
app = Flask(__name__)
DATABASE_URL = os.environ.get("DATABASE_URL")
SECRET_KEY = os.environ.get("SECRET_KEY", "dev-only-key")
def get_db():
return psycopg2.connect(DATABASE_URL, sslmode="require")
@app.route("/api/rezultati")
def saraksts():
with get_db() as conn, conn.cursor() as cur:
cur.execute("SELECT vards, punkti FROM rezultati ORDER BY punkti DESC LIMIT 10")
return jsonify([dict(zip(["vards","punkti"], r)) for r in cur.fetchall()])
if __name__ == "__main__":
app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))