Рубрики
Без рубрики

Fullstack Basics

Введение курса вы узнаете, как сделать веб-приложение, управляемое данными, с помощью Python …. Tagged с помощью Python, Flask, Fullstack, Basics.

Вы узнаете, как сделать веб-приложение, управляемое данными с помощью Python. Применение в Интернете означает, что вы изучите оба компонента; фронт и бэкэнд.

Вы создадите простое многопользовательское приложение для блога. Это похоже

Этот курс взят из Udacity’s Fullstack Fendations курс.

Примечание Изображение было сделано из одного из Dev.to Post

Требования

  1. Бродяга (для примеров)
  2. Git
  3. Python3.x
  4. пипенв

Vagrant – это программное обеспечение, которое Конфигурирует виртуальную машину и дает вам Поделиться файлами Между вашим хост -компьютером и файловой системой виртуальной машины.

Загрузите бродягу с Здесь и импортируйте его в бродяги.

vagrant box add --name fullstack_foundations /path/to/file

Теперь загрузите бродягу

vagrant init fullstack_foundations
vagrant up
vagrant ssh

Итак, что вы будете делать в приложении для ведения блога; C Реат, r ead, Обновление и Удалить сообщения. Короче говоря, это известно как Crud.

Всякий раз, когда вы регистрируетесь, загружаете носитель или написаете сообщение, вы «создаете» данные в базе данных, которые будут получены позже. Видеть данные из других или вашего профиля, считается «чтением» данных. С одинаковым током, когда вы редактируете существующую запись данных в базе данных, он известен как «обновление». Удаление той же информации из базы данных известно как «удаление»

Круд инкапсулирует все операции, которые пользователь делает в Интернете.

База данных – это Постоянное хранилище Для всех операций CRUD. Это означает, что даже если сервер выключен, вы можете выполнить те же операции CRUD после перезагрузки сервера. SQL – это популярный язык для взаимодействия с базой данных, которая инкапсулирует все базовые операции, выполняемые СУБД (Система управления базами данных; система, которая обрабатывает все задачи для хранения стойки).

SQL имеет 4 основных запроса, которые связаны с CRUS

INSERT INTO `users` (`username`, `name`) VALUES ('user101', 'Ankit'); -- creating data
SELECT * FROM `users`;                                                -- reading data
UPDATE `users` SET `name`='Anuj' WHERE `username`='user101';          -- updating data
DELETE FROM `users` WHERE `username`='user101';                       -- deleting data

ORM (AKA, Реляционная карта Mapper ) – это своего рода структура, которая позволяет вам инкапсулировать все сложные и страшные запросы SQL Анкет Он отображает SQL, работающий на классе Python, так что разработчики больше сосредоточены на бизнес -логике, которая беспокоится об этих запросах и потенциальных уязвимостях. В этом курсе я буду использовать популярный ORM; SQLALCHEMY

Установка SQLachemy с PIP

pip install --user sqlalchemy

Чтобы класс взаимодействовал с SQL через SQLALCHEMY, вам нужно унаследовать SQLALCHEMY декларативный базовый класс

from sqlalchemy.ext.declarative import declarative_base, DeclarativeMeta
Base: DeclarativeMeta = declarative_base()

Ваш класс должен иметь __tablename__ Переменная данных, которая сообщает SQLalchemy, какую таблицу в базе данных соответствует эти классы. А затем после определения классов, вам нужно создать таблицы, используя create_all Метод, который принимает двигатель аргумент

Base.metadata.create_all(engine)

Двигатель должен быть создан перед определением классов

from sqlalchemy.engine import create_engine, Engine
engine: Engine = create_engine("sqlite:///blogs.db")

Первая часть в двигателе ( sqlite:/// ) известна как диалект, который является типом поставщика базы данных. Это могут быть SQLite, MySQL, MSSQL, Postgres и многие другие поставщики SQL.

Так что в нашем случае класс пользователей будет выглядеть

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(100))
    uname = Column(String(10), nullable=False)
    passwd = Column(String(20), nullable=False)
    pass

Теперь вам нужна последняя вещь, SessionMaker Чтобы получить курсор базы данных. Без этого вы не сможете выполнять действия в базе данных

from sqlalchemy.orm.session import Session, sessionmaker
DBSession = sessionmaker(engine)
session: Session = DBSession()

Создание пользователя с сеансом составляет всего 3 строки кода, когда вы все настроены

user = User(name='Anuj', uaername='anuj', password='anuj101')
session.add(user)
session.commit()

До сих пор вы узнали, как ссылаться на базу данных и создать запись. Теперь пришло время прочитать из базы данных. Чтобы перечислить всех пользователей, код очень похож

users = session.query(User).all()

Это даст вам список всех пользователей ( list [user] ). Чтобы получить самый первый результат, вам нужно позвонить .первый () метод

user = session.query(User).first()

Это даст вам Пользователь тип объекта. Так session.query (пользователь) Вернут Запрос объект. Вы можете увидеть все остальные методы по ссылке.

Обновление записи очень просто с SQLalchemy, вам нужно сначала получить объект, обновить его свойство, а затем добавить и посвятить себя сеансу.

user = session.query(User).first()
user.name = 'My New Name'
session.add(user)
session.commit()

Это мгновенно обновит соответствующую запись в базе данных.

Удаление записи аналогична приведенному приведенному коду, но здесь вы должны использовать .delete () вместо .добавлять () с объектом сеанса.

user = session.query(User).first()
session.delete(user)
session.commit()

В Webworld вы часто услышите два слова; Клиент и сервер. Клиенты и серверы – это компьютерные устройства, которые общаются друг с другом через Интернет.

Клиент, как правило, тот, кто инициирует Запрос на сервер, а затем сервер обрабатывает этот запрос и отправляет Ответ Вернуться к клиенту.

Чтобы гарантировать, что как клиенты, так и серверы говорят на одном языке, протоколы – это правила, которые обеспечивают соблюдение некоторого формата/способов связи с сервером/клиентом без путаницы. HTTP является протоколом для Интернета.

HTTP использовал протокол TCP/IP для лучшей связи. HTTP MANEA Hyper Text Protocol, TCP означает протокол контроля передачи для Канал, ориентированный на соединение и IP означает интернет -протокол для Определение и поиск конечных устройств Анкет

Чтобы браузер понять о состоянии запроса, сервер возвращает 3 -значный номер с ответом, известным как Код статуса Анкет Есть некоторые общие коды статуса.

200 - OK
201 - Created
401 - Unauthorized
404 - Not Found
502 - Bad Gateway
503 - Internal Server Error

Чтобы различить запросы, клиент отправляет с ним глаголы HTTP. Есть 9 глаголов HTTP, но 2 из них являются наиболее распространенными; Получить и Пост Анкет GET используется для Запросить существующий ресурс и если ресурс не найден, сервер вернет HTTP 404. Пост используется для Создано или обновит ресурс в базе данных.

В этом разделе вы узнаете, как создать веб -сервер с http.server упаковка. Так что простой сервер Hello World будет выглядеть

from http.server import BaseHTTPRequestHandler, HTTPServer


class RequestHandler(BaseHTTPRequestHandler):
    # overriding do_GET method
    def do_GET(self):
        try:
            # the request path
            if self.path.endswith("/hello"):
                self.send_response(200)  # sending status code
                self.send_header("Content-Type",
                                 "text/html; charset=utf-8")  # sending header
                # ending header, this will let browsers know that after this there is response body
                self.end_headers()

                # sending http response body
                body = "

Hello World!

" self.wfile.write(body.encode()) else: self.send_response(404) self.send_header("Content-Type", "text/plain; charset=utf-8") self.end_headers() body = "Resource Not Found" self.wfile.write(body.encode()) except IOError: # error handling self.send_error(503, "Internal Server Error") pass pass pass def run(host='0.0.0.0', port=5000, requestHandler=RequestHandler): try: # creating instance of HTTP server and binding to host and port with request handler httpd = HTTPServer((host, port), requestHandler) print("Press ^C to Exit") # starting server httpd.serve_forever() except KeyboardInterrupt: print("\rStopping") httpd.shutdown() # stopping server of pressing CTRL C if __name__ == "__main__": run()

Я наследую Basehttprequesthandler в RequestHandler класс и расширение функции do_get Чтобы справиться со всеми запросами GET. Запрос на работу выполняется do_post метод и показан ниже

def do_POST(self):
    file: BufferedReader = self.rfile  # body

    # reading header file
    ctype = self.headers.get("content-type")
    clen = self.headers.get("content-length")

    # parsing to dict from string
    if ctype == "application/json":
        body = json.loads(file.read(int(clen)).decode())
    else:
        return self.send_error(503, "Accepts only JSON data")

    # sending response
    self.send_response(200)
    self.send_header("Content-Type", "application/json")
    self.end_headers()

    data = {"success": True, "body": body}
    body = json.dumps(data)
    self.wfile.write(body.encode())

В этом метод Post только принимает Приложение/JSON Анкет Кроме того, вы видели, что создание запросов на обработку серверов занимает очень много времени, и вы, как разработчик, должны сосредоточиться больше на продукте, чем на языке. Итак, в следующем разделе вы увидите бэкэнд -серверную структуру, которая будет обрабатывать все это для вас под капюшоном

Фреймворки – это инструменты разработчика, которые упрощает процесс разработки Позаботьтесь обо всех тривиальных повторных кодах и позволите сосредоточиться на приложении.

В этой теме вы будете использовать Flask Framework для создания веб -приложения. Установка колбы

pip install flask

Давайте создадим то же самое приложение Hello World в Flask

from flask import Flask

# creating flask app
app = Flask(__name__)

# handling routes
@app.route("/")
@app.route("/hello")
def hello_world():
    # by default sends html response
    return "Hello World"


if __name__ == "__main__":
    # running server
    app.run(debug=True, host='0.0.0.0', port=5000)

Вы видели! Всего за 15 строк мы рассмотрели веб -сервер Hello World. Это сила, которую вы испытаете, работая с фреймворками.

Маршрутизация помогает серверу однозначно определить ресурс и чистые маршруты типа слизняка помогает клиентам и пользователям запомнить URL -адрес приложения. Например, с этим URL /post/1 , каждый может легко выяснить, что клиент ожидает, что сервер отправит подробную информацию о блоге

Таким образом, чтобы создать динамическую маршрутизацию, вам нужно добавить такого заполнителя

@app.route('/post/')
def get_post_by_id(id):
    pass

Это вернется, id типа int А позже вы можете использовать его в функции.

По умолчанию @app.route Слушает метод получения, поэтому для добавления метода POST вам необходимо включить Методы = ['post'] . Однако это будет слушать только для метода поста.

@app.route("/post", methods=['POST']
def save_post():
    pass

По мере того, как ваше приложение становится более сложным, создание HTML -ответа в самих функциях будет очень сложным, и в конечном итоге вы оставите некоторые ошибки. Таким образом, чтобы преодолеть эту проблему, Flask поддерживает шаблон HTML -страниц, которые позволяют расширить шаблон, а затем сделать его на ходу. Флэста использует Джинджа как шаблон двигателя. Вы можете включить функции колбы, такие как url_for в самом шаблоне.

По умолчанию папку шаблона, используемая Flask Is Шаблоны В текущем каталоге точки входа приложения Flask

Чтобы создать более персонализированный пользовательский опыт, вы будете использовать сеансы Анкет Сессии позволяют серверам хранить информацию о клиенте, а затем соответствующим образом извлекать детали. Чтобы использовать сеансы, Flask должен иметь секретный ключ, используемый для шифрования данных.

app.secret_key = 'some random key'

Пользователи должны увидеть некоторые предупреждения о своих взаимодействиях, для этого вы будете

Настройка флэш -сообщения

flash("Your message")

Получение сорважных сообщений в шаблоне

{% with messages = get_flashed_messages() %}
  {% if messages %}
    
    {% for message in messages %}
  • {{ message }}
  • {% endfor %}
{% endif %} {% endwith %}

DataFiles для проекта расположены в Программы папка. Virtual Env в бродяге уже получена, как только вы войдете в SSH. Главный сервер blog_server.py который зависит от модели.py и Database.py Анкет Другие файлы сервера для демонстрации курса также расположены в том же каталоге

Что ж, прямое побалование к разработке, кажется, немного быстрее, но в конечном итоге вы столкнетесь с слишком большим количеством ошибок.

Чтобы преодолеть эту проблему, вы должны разрабатывать каждую функцию одну за один и дополнить слой другой, когда один будет завершен (разработан и протестирован). При этом ваши клиенты будут иметь полный статус проекта, и ваш рабочий процесс будет хорошо организован

Для этого вы можете просто создать грубую модель приложения вручную, а затем подключить точки пользовательского потока. За этим вы в конечном итоге получите что -то под названием каркас Из приложения это также называется Blueprint. Затем, когда вы начнете разработку, вы сначала заполните и как.

Перейдите по ссылкам, чтобы связаться со мной

Оригинал: “https://dev.to/tbhaxor/fullstack-basics-5214”