pip install django==5.1
django-admin startproject blogproject
cd blogproject
python manage.py startapp blogcurl -SSL https://raw.githubusercontent.com/django/django/main/django/bin/dja # Arba tiesiogiai: django-admin startproject blogproject .pip install psycopg2-binary django-allauth django-tailwind django-crispy-formINSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sites',
'django.contrib.sites',
'django.contrib.sites',
'django.contrib.sites',
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'tailwind',
'theme', # mūsų app
'crispy_forms',
'crispy_tailwind',
'blog',
]
# Tailwind app
TAILWIND_APP_NAME = 'theme'
# Allauth
SITE_ID = 1
LOGIN_REDIRECT_URL = '/'
ACCOUNT_LOGOUT_REDIRECT_URL = '/'
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_USERNAME_REQUIRED = False
# Crispy
CRISPY_ALLOWED_TEMPLATE_PACKS = "tailwind"
CRISPY_TEMPLATE_PACK = "tailwind"from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
class Post(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(unique=True, max_length=200)
author = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
is_published = models.BooleanField(default=True)
tags = models.CharField(max_length=200, blank=True)
class Meta:
ordering = ['-created_at']
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post_detail', kwargs={'slug': self.slug})from django.contrib import admin
from django import forms
from easymde.fields import EasyMDEField
from .models import Post
class PostAdminForm(forms.ModelForm):
content = EasyMDEField()
class Meta:
model = Post
fields = '__all__'
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
form = PostAdminForm
prepopulated_fields = {"slug": ("title",)}
list_display = ('title', 'author', 'created_at', 'is_published')
search_fields = ('title', 'content')
list_filter = ('is_published', 'created_at')from django.views.generic import ListView, DetailView
from .models import Post
class HomeView(ListView):
model = Post
template_name = 'blog/home.html'
context_object_name = 'posts'
paginate_by = 10
def get_queryset(self):
return Post.objects.filter(is_published=True){% extends "base.html" %}
{% load static %}
{% block content %}
<div class="max-w-4xl mx-auto px-6 py-12">
<h1 class="text-5xl font-bold text-center mb-12 text-primary">2025 Django Bootcamp</h1>
<div class="grid gap-8">
{% for post in posts %}
<article class="card bg-base-100 shadow-xl hover:shadow-2xl transition">
<div class="card-body">
<h2 class="card-title text-2xl">
<a href="{{ post.get_absolute_url }}" class="hover:text-primary">
{{ post.title }}
</a>
</h2>
<div class="flex gap-4 text-sm text-gray-500 mb-4">
<span>{{ post.author }}</span>
<span>{{ post.created_at|date:"d F Y" }}</span>
</div>
<p class="text-gray-700">
{{ post.content|truncatewords_html:50|safe }}
</p>
<div class="card-actions justify-end mt-6">
<a href="{{ post.get_absolute_url }}" class="btn btn-primary">Tęsti</a>
</div>
</div>
</article>
{% empty %}
<p class="text-center text-xl">Dar nėra įrašų.</p>
{% endfor %}
</div>
<!-- Puslapiavimas -->
{% if is_paginated %}
<div class="flex justify-center mt-12">
<div class="join">
{% if page_obj.has_previous %}
<a href="?page={{ page_obj.previous_page_number }}" class="join-item btn">Ankstesnis</a>
{% endif %}
<span class="join-item btn btn-ghost">Puslapis {{ page_obj.number }} / {{ page_obj.paginator.num_pages }}</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}" class="join-item btn">Kitas</a>
{% endif %}
</div>
</div>
{% endif %}
</div>
{% endblock %}FROM python:3.12-slim
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY .
CMD ["gunicorn", "blogproject.wsgi:application", "--bind", "0.0.0.0:8000"]while sąlyga:
# Kodas, kuris bus vykdomasskaičius = 1
while skaičius <= 5:
print(skaičius)
skaičius += 11
2
3
4
5slaptažodis = ""
while slaptažodis != "saugus123":
slaptažodis = input("Įveskite slaptažodį: ")
if slaptažodis != "saugus123":
print("Neteisingas slaptažodis, bandykite dar kartą!")
print("Prisijungta sėkmingai!")Įveskite slaptažodį: testas
Neteisingas slaptažodis, bandykite dar kartą!
Įveskite slaptažodį: saugus123
Prisijungta sėkmingai!while True:
atsakymas = input("Ar norite tęsti? (taip/ne): ")
if atsakymas.lower() == "ne":
print("Programa baigta.")
break
print("Tęsiame...")Ar norite tęsti? (taip/ne): taip
Tęsiame...
Ar norite tęsti? (taip/ne): ne
Programa baigta.skaičius = 0
while skaičius < 10:
skaičius += 1
if skaičius % 2 == 0: # Praleidžiame lyginius skaičius
continue
print(f"Nelyginis skaičius: {skaičius}")Nelyginis skaičius: 1
Nelyginis skaičius: 3
Nelyginis skaičius: 5
Nelyginis skaičius: 7
Nelyginis skaičius: 9skaičius = 1
while skaičius <= 3:
print(f"Skaičius: {skaičius}")
skaičius += 1
else:
print("Ciklas baigtas!")Skaičius: 1
Skaičius: 2
Skaičius: 3
Ciklas baigtas!suma = 0
while True:
įvestis = input("Įveskite skaičių (0 baigia): ")
try:
skaičius = int(įvestis)
if skaičius == 0:
break
suma += skaičius
except ValueError:
print("Prašome įvesti skaičių!")
print(f"Bendra suma: {suma}")Įveskite skaičių (0 baigia): 5
Įveskite skaičių (0 baigia): 10
Įveskite skaičių (0 baigia): abc
Prašome įvesti skaičių!
Įveskite skaičių (0 baigia): 0
Bendra suma: 15<?php
// Vartotojo vardo validacija
$username = $_POST['username'] ?? '';
if (!preg_match('/^[a-zA-Z0-9]{3,20}$/', $username)) {
die('Netinkamas vartotojo vardas! Naudokite tik raides ir skaičius, 3-20 simbolių.');
}
// El. pašto filtravimas
$email = filter_var($_POST['email'] ?? '', FILTER_SANITIZE_EMAIL);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die('Netinkamas el. pašto formatas!');
}
echo "Duomenys sėkmingai apdoroti: $username, $email";
?><?php
try {
$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Paruošta užklausa
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND email = :email");
$stmt->execute([
'username' => $_POST['username'] ?? '',
'email' => $_POST['email'] ?? ''
]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($user) {
echo "Vartotojas rastas!";
} else {
echo "Vartotojas nerastas.";
}
} catch (PDOException $e) {
die("Klaida: " . $e->getMessage());
}
?><?php
$comment = $_POST['comment'] ?? '';
// Komentaro kodavimas prieš rodant
$safeComment = htmlspecialchars($comment, ENT_QUOTES, 'UTF-8');
echo "<div>Komentaras: $safeComment</div>";
?><?php
session_start();
// Sukuriame CSRF žetoną
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
?>
<form method="POST" action="process.php">
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
<input type="text" name="username" placeholder="Vartotojo vardas">
<button type="submit">Siųsti</button>
</form>
<?php
// process.php
session_start();
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die('Netinkamas CSRF žetonas!');
}
// Toliau apdorojame formą...
?><?php
$uploadDir = 'uploads/';
$allowedTypes = ['image/jpeg', 'image/png'];
if ($_FILES['userfile']['error'] === UPLOAD_ERR_OK) {
$fileType = mime_content_type($_FILES['userfile']['tmp_name']);
if (!in_array($fileType, $allowedTypes)) {
die('Netinkamas failo formatas! Leidžiami tik JPG ir PNG.');
}
// Generuojame unikalų failo pavadinimą
$newFileName = uniqid() . '.png';
$destination = $uploadDir . $newFileName;
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $destination)) {
echo "Failas sėkmingai įkeltas!";
} else {
echo "Klaida įkeliant failą.";
}
} else {
echo "Failo įkėlimo klaida.";
}
?><?php
$password = $_POST['password'] ?? '';
// Slaptažodžio maiša
$hashedPassword = password_hash($password, PASSWORD_BCRYPT);
// Patikrinimas
if (password_verify($password, $hashedPassword)) {
echo "Slaptažodis teisingas!";
} else {
echo "Slaptažodis neteisingas.";
}
?>dependencies:
http: ^1.1.0{
"id": 1,
"vardas": "Jonas",
"amžius": 30
}import 'dart:convert';
import 'package:http/http.dart' as http;
void main() async {
final url = Uri.parse('https://api.example.com/vartotojas');
final atsakymas = await http.get(url);
if (atsakymas.statusCode == 200) {
final jsonDuomenys = jsonDecode(atsakymas.body);
print('Vardas: ${jsonDuomenys['vardas']}'); // Rezultatas: Vardas: Jonas
print('Amžius: ${jsonDuomenys['amžius']}'); // Rezultatas: Amžius: 30
} else {
print('Klaida: ${atsakymas.statusCode}');
}
}[
{"id": 1, "vardas": "Jonas", "amžius": 30},
{"id": 2, "vardas": "Rasa", "amžius": 25}
]class Vartotojas {
final int id;
final String vardas;
final int amzius;
Vartotojas({required this.id, required this.vardas, required this.amzius});
factory Vartotojas.isJson(Map<String, dynamic> json) {
return Vartotojas(
id: json['id'],
vardas: json['vardas'],
amzius: json['amžius'],
);
}
}import 'dart:convert';
import 'package:http/http.dart' as http;
Future<List<Vartotojas>> gautiVartotojus() async {
final url = Uri.parse('https://api.example.com/vartotojai');
final atsakymas = await http.get(url);
if (atsakymas.statusCode == 200) {
List jsonDuomenys = jsonDecode(atsakymas.body);
return jsonDuomenys.map((json) => Vartotojas.isJson(json)).toList();
} else {
throw Exception('Nepavyko gauti duomenų');
}
}import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: VartotojuSarasas(),
);
}
}
class VartotojuSarasas extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Vartotojų Sąrašas')),
body: FutureBuilder<List<Vartotojas>>(
future: gautiVartotojus(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data!.length,
itemBuilder: (context, index) {
final vartotojas = snapshot.data![index];
return ListTile(
title: Text(vartotojas.vardas),
subtitle: Text('Amžius: ${vartotojas.amzius}'),
);
},
);
} else if (snapshot.hasError) {
return Text('Klaida: ${snapshot.error}');
}
return CircularProgressIndicator();
},
),
);
}
}package main
import "fmt"
func spausdintiTeksta(tekstas string) {
for i := 0; i < 3; i++ {
fmt.Println(tekstas)
}
}
func main() {
go spausdintiTeksta("Goroutine veikia!") // Paleidžiama kaip goroutine
spausdintiTeksta("Pagrindinė funkcija") // Vykdoma pagrindinėje gijoje
}package main
import "fmt"
func siustiDuomenis(kanalas chan int) {
kanalas <- 42 // Siunčiamas skaičius į kanalą
}
func main() {
kanalas := make(chan int) // Sukuriamas kanalas
go siustiDuomenis(kanalas)
skaicius := <-kanalas // Gaunami duomenys iš kanalo
fmt.Println("Gautas skaičius:", skaicius) // Rezultatas: Gautas skaičius: 42
}package main
import (
"fmt"
"sync"
)
func vykdytiUžduotį(id int, wg *sync.WaitGroup) {
defer wg.Done() // Signalizuoja, kad goroutine baigė darbą
fmt.Printf("Užduotis %d atlikta\n", id)
}
func main() {
var wg sync.WaitGroup
for i := 1; i <= 3; i++ {
wg.Add(1) // Pridedama užduotis
go vykdytiUžduotį(i, &wg)
}
wg.Wait() // Laukiama, kol visos užduotys baigsis
fmt.Println("Visos užduotys atliktos!")
}Užduotis 2 atlikta
Užduotis 1 atlikta
Užduotis 3 atlikta
Visos užduotys atliktos!package main
import "fmt"
func kvadratas(skaicius int, kanalas chan int) {
rezultatas := skaicius * skaicius
kanalas <- rezultatas
}
func main() {
skaiciai := []int{2, 4, 6, 8}
kanalas := make(chan int)
for _, sk := range skaiciai {
go kvadratas(sk, kanalas)
}
for i := 0; i < len(skaiciai); i++ {
fmt.Println("Kvadratas:", <-kanalas)
}
}Kvadratas: 4
Kvadratas: 16
Kvadratas: 36
Kvadratas: 64