Простое веб приложение на web.py.

Декораторы - это такая конструкция языка, которая может изменить поведение функции, метода, класса и т.д. не изменяя ее саму.

Это идеальный способ что то изменить в программе без модификации кода изменяемого объекта.

Разберем процесс декорирования функции.

Для начала, рассмотрим некоторые особенности функций.

Как видно, функция может быть присвоена переменной как обычное значение и следовательно быть передана как параметр другой функции.

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

def greet(name):
    return "hello "+name

greet_someone = greet
print greet_someone("John")

# Outputs: hello John
def greet(name):
    def get_message():
        return "Hello %s" % name
    result = get_message()+'!'
    return result
print greet("John")

# Outputs: Hello John

Состоит из 30% воды 20% спирта и 50% рекурсивного коктеля :-).

RuntimeError: maximum recursion depth exceeded

Добавим счетчик итерации и ограничим рекурсию.

print("Making recousion coctail!!!")

def make(water,alcohol):
    mix = 0
    mix = mix + (water*30)
    mix = mix + (alcohol*20)
    mix = mix + (make(water,alcohol)*50)
    return mix

print(make(4,5))
def make(water,alcohol,cnt):
    cnt += 1
    mix = 0
    mix = mix + (water*30)
    mix = mix + (alcohol*20)
    if cnt >10:
        return mix
    mix = mix + (make(water,alcohol,cnt)*50)
    return mix

cnt = 0    
print(make(4,5,cnt))

Простейшее веб приложение сервер.

1 - globals это функция, возвращающая словарь который содержит все переменные, определенные в глобальном прострастве.

Если она вызывается из функции, то возвратит словарь пространства того модуля, где ф-ция была определена а не где ее вызвали.

web.py

Let’s make a new directory for our templates (we’ll call it templates). Inside, make a new file whose name ends with HTML (we’ll call it index.html). Now, inside, you can just write normal HTML

Or you can use web.py’s templating language to add code to your HTML:

pip install web.py
import web

urls = (
    '/', 'hello'
)

app = web.application(urls,globals())#1

class hello:
    def GET(self):
        return "Hello world!"

if __name__ == "__main__":
    app.run()
web.py

Написать консольную игру “Очко”.

Игроку предлагается выбрать карту (элемент из списка колоды).

Колода имеет вид:

Перед началом игры колода перемешивается.

Игроку последовательно выдается первый элемент карты из списка, при этом элемент удаляется из колоды.

Далее игрок может взять еще карту или прекратить. В случае набора 21 очков либо при прекращении набора вступает в игру компьютер и берет последовательно карты до достижения 18 очков, либо до счета, превышающего счет игрока.

koloda = [2,3,4,5,6,7,8,9,10,11.... и т.д.]

Сайт flagma.kz

Создать проект Django c такой командой.

Создать модель данных для того, чтобы эта команда работала и заполняла таблицу.

from django.core.management.base import BaseCommand, CommandError

from app.models import Person, MainDocuments, Person2Document, Company, City, Person2Company, Import
import re
import psycopg2
import bs4
import requests
import time

    def parse_company(c):
        try:
            city = City.objects.get(name_ru__icontains=c.city_text)
            c.city = city
            c.save()
        except:
            print('City not found')

        namear = c.faunders_text.split(',')
        p = Person()
        p.raw_name = namear[0]
        p.role = namear[1]
        p.source = 'flagma.kz'
        p.save()
        p.parse()

        p2c = Person2Company()
        p2c.company = c
        p2c.person = p
        p2c.save()

        print('Saving person %s' % namear[0])



    class Command(BaseCommand):

        def handle(self, *args, **options):
            print('Importing.')   
            Company.objects.all().delete()
            Person.objects.filter(source='flagma.kz').delete()
            Person2Company.objects.all().delete()
            urls = []
            for cnt in range(1,1000):
                urls.append('https://flagma.kz/kompanii-k-%s.html' % cnt)

            for url in urls:
                print("Importing %s" % url)
                time.sleep(1)
                i = Import()
                i.url = url
                i.save()
                rez = requests.get(url)
                soup = bs4.BeautifulSoup(rez.text, 'html.parser')
                items = soup.findAll('div',{"class": "page-list-item-info"})
                for i in items:
                    name = i.find('a').text
                    location = i.find('span',{"itemprop": "location"}).text
                    boss = i.find('span',{"itemprop": "employee"}).text
                    arrboss = boss.split(',')
                    c = Company()
                    c.name_ru = name
                    c.name_kz = name
                    c.faunders_text = boss
                    c.city_text = location
                    c.save()
                    parse_company(c)
                    print('Saving.....%s' % name)
Потратить 2 кредита и начать обучение!
Задать вопрос, прокомментировать.