This is code
This too
#button {
border: none;
}
Quoted text.
Устанавливаем и настраиваем базу данных
sudo apt install mysql-server
password for root (DB): 1
-u = user, -p = password
mysql -u root -p
if you have problem with login as root or change mysql root password
look at Fix mysql root password
https://github.com/discipleartem/scripts
show databases;
set utf8 - кодировка БД
collate - способ сравнивания
...unicode_ci регистро-независимый поиск
flask-blog некорректное имя
create database flask_blog character set utf8 collate utf8_unicode_ci;
выход из консоли mysql
exit;
Установка виртуального окружения
virtualenv --python=python3.8 venv
- в Ubuntu 20.04 по умолчанию установлен python 3.8
для установки sudo apt install python3-virtualenv
активация
source venv/bin/activate
деактивация
deactivate
проверка установленых пакетов \ библиотек
pip freeze
cохранение зависимостей как bundle
в ruby
pip freeze > requirements.txt (лучше не использовать ибо тянет глобальные зависимости)
pip freeze --local > requirements.txt
Загрузка зависимостей как bundle install в ruby
pip install -r requirements.txt
Lesson 3
cd .../flask/app/
touch {config,app,main,view}.py
pip install flask
repl and virtualenv
не забыть установить SublimeREPL
через Package Control
https://www.youtube.com/watch?v=v3PIblL_Kq8
lesson 4
используйте Bootstrap v. 3.3.*
https://getbootstrap.com/docs/3.3/getting-started/
Первоначальный шаблон
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<title>Document</title>
</head>
<body>
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Brand</a>
</div> <!-- navbar-header -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
<li><a href="#">Link</a></li>
</ul>
<from class="navbar-form navbar-left">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search">
</div> <!-- form-group -->
<button type="submit" class="btn btn-default">Submit</button>
</from>
<ul class="nav navbar-nav navbar-right">
<li><a href="#">Link</a></li>
</ul>
</div> <!-- collapse navbar-collapse -->
</div> <!-- container-fluid -->
</nav>
<div class="container">
<div class="row">
<h2>Hello, {{ template_name }}</h2>
</div>
</div>
</body>
</html>
lesson 5
в url_for
передаем имя метода/функции из контроллера view.py
href="{{ url_for('index') }}
href="{{ url_for('posts.index2') }}"
для нашего Blueprint /posts/templates/posts/index.html
мы указываем просто posts
так как в app/posts/blueprint.py
мы обозначили имя Blueprint('posts'....
.index2
имя метода/функции из контроллера app/posts/blueprint.py
lesson 6
активируем вирьуальное окружение перед установкой чего либо
source venv/bin/activate
#==2.1.4 не загружаеться
pip install flask-sqlalchemy mysql-connector
работа в консоле python (venv)
import models
from app import db
db.create_all()
словил ошибку:
sqlalchemy.exc.NotSupportedError: (mysql.connector.errors.NotSupportedError) Authentication plugin 'caching_sha2_password' is not supported
дописал ?auth_plugin=mysql_native_password
'mysql:////myapp:password@localhost/mydatabase?auth_plugin=mysql_native_password'
from models import Post
p = Post(title='First post', body='Forst post body')
db.session.add(p)
db.session.commit()
p
p1 = Post(title='Second post', body='Second post body')
p1
p.slug
db.session.add(p1)
db.session.commit()
p2 = Post(title='Third post! 3-test', body='Third post body')
db.session.add(p2)
db.session.commit()
p2.slug
posts = Post.query.all()
posts
поиск по содержанию
p2 = Post.query.filter(Post.title.contains('second')).all()
p2
точный поиск
p3 = Post.query.filter(Post.title=='!').all()
p3
p3 = Post.query.filter(Post.title=='Third post! 3-test').all()
p3 = Post.query.filter(Post.title=='Third post! 3-test').first
p3
lesson 7 https://youtu.be/poz824J33yg