Skip to content

Commit a910e89

Browse files
committed
Add 17th (web) and 18th (django) lectures and assets
1 parent 9e7be38 commit a910e89

7 files changed

Lines changed: 501 additions & 0 deletions

File tree

lectures/17-web.slim

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
= slide 'Имате домашно' do
2+
p предадените решения са цифром и словом 0(НУЛА)
3+
4+
= slide '' do
5+
img src="17/you-make-bunny-cry.jpg"
6+
7+
= slide 'Паяжина' do
8+
p Ще ви говорим за третото 'w' от 'www'
9+
p.action Как тъй краткия текст "facebook.com" ви навежда на мисли със син фон, пълни със снимките от нереално красивите и интересни ваканции на приятелите ви.
10+
p.action С какво "facebook.com" е различно от "чорба с праз"? И двете са текст от 13 символа
11+
12+
= slide 'HTTP' do
13+
p.action Client-Server протокол, за раздаване на документи
14+
p.action Измислен е с цел споделяне на научни документи
15+
p.action Това значи предимно текст, леко форматиран и (недай си Боже!) някоя картинка
16+
17+
= slide 'HTTP/1.1' do
18+
p.action От това нещо някак се раждат неща като twitter, facebook, amazon
19+
20+
= slide 'HTTP/2.0' do
21+
p <a href="https://tools.ietf.org/html/rfc7540">RFC</a> по темата
22+
p <a href="http://w3techs.com/technologies/details/ce-http2/all/all">Според w3tech</a> около 7.5% от сайтовете вече го поддържат към април тази година
23+
24+
= slide 'the basics' do
25+
p Когато искаме да направим връзка с друга машина през мрежата
26+
p.action операционната система знае през кое мрежово устройство да изпрати пакет, който е предназначен за някой IP адрес
27+
p.action най-често това означава, че пакета стига до вашия gateway(примерно рутера ви вкъщи), който знае на къде да го изпрати, за да стигне до крайната си цел
28+
p.action от вашата мапина до целта обикновено се минава през много на брой други машини(hop-ове)
29+
p.action ако връзката е TCP(няма да мислим за други за сега) имаме гаранция, че всички изпратени пакети са доставени, тъй като получаваме потвърждения и при неуспех изпращаме отново
30+
31+
p.action от гледна точка на вашия код всички тези неща изглеждат доста просто
32+
33+
= slide 'HTTПротокола' do
34+
p.action Текстов
35+
p.action Без състяние
36+
p.action Клиента праща "заявка", сървъра отговаря с "отговор"
37+
38+
= slide 'От какво се състоят' do
39+
p.action И двете се сътоят от headers и body
40+
p.action "Мета" данни и данни
41+
42+
= slide 'Headers' do
43+
p.action Ключ: Стойност
44+
p.action Описани са в стандарта
45+
46+
= slide 'Body' do
47+
p.action Каквато и да е купчина от байтове
48+
49+
= slide 'Заявка пример' do
50+
51+
example:
52+
53+
GET /hello HTTP/1.1
54+
Host: www.example.com
55+
Accept: text/plain
56+
57+
= slide 'Отговор' do
58+
59+
example:
60+
61+
HTTP/1.1 200 OK
62+
Date: Mon, 23 May 2005 22:38:34 GMT
63+
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
64+
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
65+
ETag: "3f80f-1b6-3e1cb03b"
66+
Content-Type: text/plain; charset=UTF-8
67+
Content-Length: 12
68+
Accept-Ranges: bytes
69+
Connection: close
70+
71+
Hello Wolrd!
72+
73+
= slide 'socketserver' do
74+
p Просто TCP сървър
75+
example:
76+
import socketserver
77+
78+
class MyTCPHandler(socketserver.BaseRequestHandler):
79+
"""
80+
The request handler class for our server.
81+
82+
It is instantiated once per connection to the server, and must
83+
override the handle() method to implement communication to the
84+
client.
85+
"""
86+
87+
def handle(self):
88+
# self.request is the TCP socket connected to the client
89+
self.data = self.request.recv(1024).strip()
90+
print("{} wrote:".format(self.client_address[0]))
91+
print(self.data)
92+
# just send back the same data, but upper-cased
93+
self.request.sendall(self.data.upper())
94+
95+
if __name__ == "__main__":
96+
HOST, PORT = "localhost", 9999
97+
98+
# Create the server, binding to localhost on port 9999
99+
server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
100+
101+
# Activate the server; this will keep running until you
102+
# interrupt the program with Ctrl-C
103+
server.serve_forever()
104+
105+
106+
= slide 'http.server' do
107+
p Строи върху socketserver с HTTP протокола
108+
109+
example:
110+
from http.server import BaseHTTPRequestHandler, HTTPServer
111+
112+
# HTTPRequestHandler class
113+
class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
114+
115+
# GET
116+
def do_GET(self):
117+
# Send response status code
118+
self.send_response(200)
119+
120+
# Send headers
121+
self.send_header('Content-type','text/html')
122+
self.end_headers()
123+
124+
# Send message back to client
125+
message = "Hello world!"
126+
# Write content as utf-8 data
127+
self.wfile.write(bytes(message, "utf8"))
128+
return
129+
130+
def run():
131+
print('starting server...')
132+
133+
# Server settings
134+
# Choose port 8080, for port 80, which is normally used for a http server, you need root access
135+
server_address = ('127.0.0.1', 8081)
136+
httpd = HTTPServer(server_address, testHTTPServer_RequestHandler)
137+
print('running server...')
138+
httpd.serve_forever()
139+
140+
141+
run()
142+
143+
= slide 'http.client' do
144+
p Клиетска библиотека за HTTP
145+
p Най - често ще е по - добре да използвате urllib.request
146+
147+
148+
= slide 'Имена' do
149+
p.action Спомняте ли си facebook.com? Какво е това .com в крайна сметка?
150+
p.action Компютрите не разбират от имена на човешки език, комуникират чрез Internet Protocol
151+
p.action Всеки (почти) компютър в паяжината има уникален (почти) IP address, който се използва за комуникация
152+
153+
= slide 'DNS' do
154+
p.action Трябва да се случи превеждане от facebook.com до IP адрес, например 173.252.120.6
155+
p.action Domain Name System върши това
156+
p.action Това е глобална, централизирана и същевременно разпределена (what!?) и изключително добре обмислена система
157+
p.action Централизира и разпределена?
158+
159+
= slide 'DNS in python' do
160+
p socket.gethostbyname и socket.gethostbyname_ex
161+
162+
= slide 'Frameworks' do
163+
p много на брой
164+
ul
165+
li Django
166+
li Flask
167+
li Muffin
168+
li Pyramid
169+
li Tornado
170+
li Bottle
171+
li ...
172+
173+
= slide 'задачата им' do
174+
ul
175+
li url routing
176+
li сервриране на HTML / XML / JSON / text / etc.
177+
li database манипулации
178+
li security features (csrf)
179+
li сесии
180+
181+
182+
= slide 'flask' do
183+
p пример
184+
example:
185+
from flask import Flask
186+
187+
app = Flask(__name__)
188+
189+
190+
@app.route("/")
191+
def hello():
192+
return "Hello flask!"
193+
194+
195+
if name == "__main__":
196+
app.run()
197+
198+
p после
199+
200+
example:
201+
pip install Flask
202+
python hello.py
203+
204+
205+
= slide 'muffin' do
206+
example:
207+
import muffin
208+
209+
app = muffin.Application('example')
210+
@app.register('/', '/hello/{name}')
211+
212+
def hello(request):
213+
name = request.match_info.get('name', 'anonymous')
214+
return 'Hello %s!' % name
215+
216+
p после
217+
218+
pip install muffin
219+
python3 hello.py run

lectures/17/you-make-bunny-cry.jpg

61.1 KB
Loading

0 commit comments

Comments
 (0)