Farkas Szilveszter Magyarországi Web Konferencia Budapest, október 3.

Hasonló dokumentumok
Biztonság java web alkalmazásokban

Imperatív programozás

Access adatbázis elérése OLE DB-n keresztül

KROMESCH SÁNDOR APP FELHŐ. API-k és Webszolgáltatások a Cloudban. Magyarországi Web Konferencia November 8.

Symfony kurzus 2014/2015 I. félév. Controller, Routing

Biztonságos PHP a gyakorlatban

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Bevezető. Servlet alapgondolatok

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

SIP telefonközpont készítése Trixbox-szal

10.óra CodeIgniter Framework #3. Gyimesi Ákos

Verziókezelt konfigurációmanagement++ Pásztor György, SZTE Klebelsberg Könyvtár

Internet technológiák

Java és web programozás

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

PC Connect. Unique ewsletter. program leírás

Miért ASP.NET? Egyszerű webes alkalmazás fejlesztése. Történet ASP ASP.NET. Működés. Készítette: Simon Nándor

Model View Controller alapú alkalmazásfejlesztés

JAVA webes alkalmazások

MVC. Model View Controller

Weboldalak Biztonsági Kérdései

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Üzenet küldése Programs (Bal soft key) Inbox New MMS Menu Insert Picture Text Audio A szerkesztés után:

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

SIP. Jelzés a telefóniában. Session Initiation Protocol

A magyar URN:NBN rendszer alapelvei

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

BackupPC. Az /etc/hosts fájlba betehetjük a hosztokat, ha nem a tejles (fqdn, DNS név) névvel hivatkozunk rájuk: # /etc/hosts #

QUICK INSTALLATION GUIDE

MVC Java EE Java EE Kliensek JavaBeanek Java EE komponensek Web-alkalmazások Fejlesztői környezet. Java Web technológiák

Imperatív programozás

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

API tervezése mobil környezetbe. gyakorlat

Szervlet-JSP együttműködés

Web-fejlesztés NGM_IN002_1

Java technológiák - ANTAL Margit. komponensek. A HTTP protokoll. Webkonténerek és szervletek. Egyszerű HTTP. ANTAL Margit.

Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009

WWW Kliens-szerver Alapfogalmak Technológiák Terv. Web programozás 1 / 31

Adatbázisok webalkalmazásokban

LINUX LDAP címtár. Mi a címtár?

Secure Vendor Administration Tool. HP szállító beállítási utasítások Hogyan regisztrálják az Önök cégi adataikat a HP beszállítói adatbázisában.

Java és web programozás

Hálózatok építése és üzemeltetése. EAP RADIUS : Gyakorlati útmutató

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

KÜRT Zrt. Logelemzés heti riport Felhasználói fiók, illetve felhasználói csoportkezelési műveletek

ATM hálózatra épülő Interaktív Televízió Szolgáltatás

DRUPAL 7. újdonságai. Hojtsy Gábor Drupal Hétvége, Budapest november 14. Angela Byron fóliái alapján

Szakmai továbbképzési nap akadémiai oktatóknak december 14. HISZK, Hódmezővásárhely / Webex

9.óra CodeIgniter Framework #1. Gyimesi Ákos

Az új be- és kimenet könyvtár

SIP telefonközpont készítése Trixbox-szal

Tartalomjegyzék. A Gmate szoftver letöltése. 3. A Gmate+ párosítása Apple eszközünkkel...4. Híváskezdeményezés...5. SMS küldés...6. Beállítások...

Rétegezett architektúra HTTP. A hálózatfejlesztés motorját a hálózati alkalmazások képezik. TCP/IP protokoll készlet

ALTEAS One ARISTON NET

Felhasználói kézikönyv az Interreg Danube Programme weboldalának látogatói számára

Molnár Gábor Zalatnay Zsolt

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET Core) Cserép Máté

Programozás és adatbázis kezelés PHP ben

SOPHOS simple + secure. A dobozba rejtett biztonság UTM 9. Kókai Gábor - Sophos Advanced Engineer Balogh Viktor - Sophos Architect SOPHOS

Faxkommunikáció integrálása a DM folyamatokba. TOPCALL Magyarország Kft., T.: ,

XML Webszolgáltatás alapú osztott alkalmazás fejlesztése Johanyák Zsolt Csaba 1

SIP telefonközpont készítése Trixbox-szal

Thomson Speedtouch 780WL

Szalai Ferenc

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

Osztott alkalmazások fejlesztési technológiái Áttekintés

Probabilités et informatique I Aléatoire et machine

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

Java Servlet technológia

Előfizetés 30 napos jelentés

Multimédia 2017/2018 II.

YOURMYPARTNER ÁLTALÁNOS SZERZŐDÉSI FELTÉTELEK

ÁLTALÁNOSAN LEÍRVA: KONKRÉTAN AZ INSOMNIA ESETÉBEN:

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

Ütemezett küldés fogyasztásmérő óra állásról inels-bus rendszerben

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

A WEB programozása - JSP1 dr.gál Tibor őszi félév

C# osztályok. Krizsán Zoltán

Számítógépes Hálózatok. 8. gyakorlat

Hálózati adminisztráció Linux (Ubuntu 8.04) 12. gyakorlat

Python modul készítés QGIS 2.8

2018, Diszkrét matematika

Webes alkalmazások fejlesztése 2. előadás. Webfejlesztés MVC architektúrában (ASP.NET) Webfejlesztés MVC architektúrában Fejlesztés ASP.

Segédanyag: Java alkalmazások gyakorlat

Újdonságok és érdekességek CONSEDU BT.

Számítógép labor V. Egyszer Web szerver. Dokumentáció. Készítette: Ács Gergely (K4C03M)

V2V - Mobilitás és MANET


2018, Diszkrét matematika

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET)

FORDÍTÁS A. EU KÖZÖS ADATBEVITELI KAPU (EU-CEG) BENYÚJTÓAZONOSÍTÓ IRÁNTI KÉRELEM

PTPi adatgyűjtő V1.5

Symfony kurzus 2014/2015 I. félév. Security: authentication, authorization, user provider, role-ok, access control, FOS user bundle

Regisztráció a Researcher ID adatbázisban

Felhasználói kézikönyv Bázis, Aktív, Portál és Portál+ csomagokhoz

Gmailes Ügyfelek postafiókjainak áttétele Virtualoso szolgáltatásra. Ha az ügyfél még nem rendelkezik saját domain névvel

Újdonságok a Google műhelyéből. Péter Ekler

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelő GUI alkalmazás készítése 3. Összetett tábla karbantartása

Üdvözli Önöket A PGY3 tantárgy! Bakay Árpád dr. NETvisor kft (30) arpad.bakay@netvisor.hu

Átírás:

Farkas Szilveszter Magyarországi Web Konferencia Budapest, 2009. október 3.

Farkas Szilveszter

Farkas Szilveszter

Farkas Szilveszter

Farkas Szilveszter

from presentation import (Django, Forms, Middleware, Tests, Python)

>>> import django >>> django.original_author 'Adrian Holovaty' >>> django.open_sourced datetime.date(2005, 7, 13) >>> django.version '1.1-final' >>> len(django.authors) 485

>>> import django >>> django.original_author 'Adrian Holovaty' >>> django.open_sourced datetime.date(2005, 7, 13) >>> django.version '1.1-final' >>> len(django.authors) 485

>>> import django >>> django.original_author 'Adrian Holovaty' >>> django.open_sourced datetime.date(2005, 7, 13) >>> django.version '1.1-final' >>> len(django.authors) 485

>>> import django >>> django.original_author 'Adrian Holovaty' >>> django.open_sourced datetime.date(2005, 7, 13) >>> django.version '1.1-final' >>> len(django.authors) 485

>>> import django >>> django.original_author 'Adrian Holovaty' >>> django.open_sourced datetime.date(2005, 7, 13) >>> django.version '1.1-final' >>> len(django.authors) 485

>>> django.model 'model' >>> django.view 'template' >>> django.controller 'view'

$ django-admin startproject webkonf $ cd webkonf $./manage.py startapp conference

from django.db import models class Venue(models.Model): name = models.charfield(max_length=64) address = models.charfield(max_length=128) class Conference(models.Model): name = models.charfield(max_length=32) venue = models.foreignkey(conferencevenue) from django.contrib.auth.models import User class Attendee(models.Model): user = models.onetoonefield(user) conferences = models.manytomanyfield( Conference, related_name='attendees')

from django.db import models class Venue(models.Model): name = models.charfield(max_length=64) address = models.charfield(max_length=128) class Conference(models.Model): name = models.charfield(max_length=32) venue = models.foreignkey(venue) from django.contrib.auth.models import User class Attendee(models.Model): user = models.onetoonefield(user) conferences = models.manytomanyfield( Conference, related_name='attendees')

from django.db import models class Venue(models.Model): name = models.charfield(max_length=64) address = models.charfield(max_length=128) class Conference(models.Model): name = models.charfield(max_length=32) venue = models.foreignkey(venue) from django.contrib.auth.models import User class Attendee(models.Model): user = models.onetoonefield(user) conferences = models.manytomanyfield( Conference, related_name='attendees')

[...] <h1>{{ conference.name }}</h1> <h2>látogatók</h2> <ul> {% for attendee in conference.attendees.all %} <li>{{ attendee.user.get_full_name }}</li> {% endfor %} </ul> [...]

from django.shortcuts import (get_object_or_404, render_to_response) from conference.models import Conference def conference_page(request, conf_id): conference = get_object_or_404( Conference, pk=conf_id) context = { 'conference': conference } return render_to_response( 'conference.html', context)

from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^/conf/(?p<conf_id>\d+)/$', 'conference.views.conference_page'), )

from django import forms

űrlapok

űrlapok szerver oldali adatellenőrzés

Űrlap osztály class AttendeeForm(forms.Form): Mező name = forms.charfield('név', max_length=32) Widget password = forms.charfield( 'Jelszó', max_length=32, widget=forms.passwordinput())

Űrlap osztály class AttendeeForm(forms.Form): Mező name = forms.charfield('név', max_length=32) Widget password = forms.charfield( 'Jelszó', max_length=32, widget=forms.passwordinput())

Űrlap osztály class AttendeeForm(forms.Form): Mező name = forms.charfield('név', max_length=32) Widget password = forms.charfield( 'Jelszó', max_length=32, widget=forms.passwordinput())

Beépített ellenőrzés email = forms.emailfield(max_length=75) zip = forms.integerfield(min_value=1000, max_value=9999) Mezőszintű egyedi ellenőrzés def clean_fieldname(self): Űrlapszintű egyedi ellenőrzés def clean(self):

Beépített ellenőrzés email = forms.emailfield(max_length=75) zip = forms.integerfield(min_value=1000, max_value=9999) Mezőszintű egyedi ellenőrzés def clean_fieldname(self): Űrlapszintű egyedi ellenőrzés def clean(self):

Beépített ellenőrzés email = forms.emailfield(max_length=75) zip = forms.integerfield(min_value=1000, max_value=9999) Mezőszintű egyedi ellenőrzés def clean_fieldname(self): Űrlapszintű egyedi ellenőrzés def clean(self):

Mezőszintű egyedi ellenőrzés def clean_email(self): if 'email' in self.cleaned_data: email = self.cleaned_data['email'] if not email.endswith('@web.conf.hu'): raise forms.validationerror('nem vagy szervező.') else: return email

from django import middlewares

process_request() process_response() process_view() process_exception()

from django.http import HttpResponseRedirect class LoginMiddleware(object): def process_request(self, request): if not request.user.is_authenticated(): if request.get_full_path()!= '/login/': return HttpResponseRedirect( '/login/?next=%s' % request.get_full_path()) else: return None

from django.http import HttpResponseRedirect class LoginMiddleware(object): def process_request(self, request): if not request.user.is_authenticated(): if request.get_full_path()!= '/login/': return HttpResponseRedirect( '/login/?next=%s' % request.get_full_path()) else: return None

process_view(self, request, view_func, view_args, view_kwargs) process_response(self, request, response) process_exception(self, request, exception)

from django import test

doctest class Conference(models.Model): """ >>> v = Venue.objects.create( name='ceu', address='budapest') >>> c = Conference.objects.create( Name='WebKonf', venue=v) >>> c.name u'webkonf' >>> c.venue.name u'ceu' """ name = models.charfield(max_length=32) venue = models.foreignkey(venue)

unittest import unittest class ConferenceTest(unittest.TestCase): def setup(self): venue = Venue.objects.create( Name='CEU', address='budapest') self.conf = Conference.objects.create( Name='WebKonf', venue=venue) def test_conference(self): self.assertequals(self.conf.name, u'webkonf') self.assertequals(self.conf.venue.name, u'ceu') def teardown(self): self.conf.delete()

from django.test import TestCase -> kliens (GET, POST) -> hozzávalók beemelése (JSON/XML dump) -> egyedi url konfiguráció -> e-mail fiók -> további assert-ek

from django.test import TestCase -> kliens (GET, POST) def test_conference(self): response = self.client.get('/conf/1/') self.asserttrue('<h1>webkonf</h1>' in response.content)

from django.test import TestCase -> hozzávalók beemelése (JSON/XML dump) class ConferenceTest(TestCase): fixtures = ['webkonf.json'] $./manage.py dumpdata conference > \ conference/fixtures/webkonf.json

from django.test import TestCase -> egyedi url konfiguráció class ConferenceTest(TestCase): urls = 'conference.test_urls'

from django.test import TestCase -> e-mail fiók from django.core import mail def test_email(self): mail.send_mail('subject', 'Message.', 'from@web.conf.hu', ['jakab@gipsz.hu'], fail_silently=false) self.assertequals(len(mail.outbox), 1) self.assertequals(mail.outbox[0].subject, 'Subject')

from django.test import TestCase -> további assert-ek assertcontains(response, text, count=none, status_code=200) assertnotcontains(response, text, status_code=200) assertformerror(response, form, field, errors) asserttemplateused(response, template_name) asserttemplatenotused(response, template_name) assertredirects(response, expected_url, status_code=302, target_status_code=200)

$ python

from django.db import models from django.contrib.localflavor.us.models import USStateField class Venue(models.Model): name = models.charfield(max_length=64) address = models.charfield(max_length=128) class USVenue(Venue): state = USStateField(default='CA') class ConferenceVenue(Venue): rooms = forms.positiveintegerfield()

from django.db import models from django.contrib.localflavor.us.models import USStateField class Venue(models.Model): name = models.charfield(max_length=64) address = models.charfield(max_length=128) class USVenue(Venue): state = USStateField(default='CA') class ConferenceVenue(Venue): rooms = forms.positiveintegerfield()

from django.db import models from django.contrib.localflavor.us.models import USStateField class Venue(models.Model): name = models.charfield(max_length=64) address = models.charfield(max_length=128) class USVenue(Venue): state = USStateField(default='CA') class ConferenceVenue(Venue): rooms = forms.positiveintegerfield()

from django.db import models from django.contrib.localflavor.us.models import USStateField class Venue(models.Model): name = models.charfield(max_length=64) address = models.charfield(max_length=128) class Meta: abstract = True class USVenue(Venue): state = USStateField(default='CA') class ConferenceVenue(Venue): rooms = forms.positiveintegerfield()

from django.contrib.auth.decorators import login_required @login_required def conference_private(request): [...] from django.utils.decorators import decorator_from_middleware from conference.middleware.login import LoginMiddleware login_required = decorator_from_middleware( LoginMiddleware) @login_required def conference_private(request): [...]

from django.contrib.auth.decorators import login_required @login_required def conference_private(request): [...] from django.utils.decorators import decorator_from_middleware from conference.middleware.login import LoginMiddleware login_required = decorator_from_middleware( LoginMiddleware) @login_required def conference_private(request): [...]

Modulok (csomagok) init.py conference/ init.py models.py templates/ conference.html views.py manage.py settings.py urls.py

Modulok (csomagok) init.py conference/ init.py models.py templates/ conference.html views.py manage.py registration/ [...] settings.py urls.py

Modulok (csomagok) init.py conference/ init.py models.py templates/ conference.html views/ init.py attendees.py conferences.py manage.py registration/ [...] settings.py urls.py

Globális/újrahasznosítható modulok INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.admin', 'conference', )

Globális/újrahasznosítható modulok INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.admin', 'conference', 'django_registration', )

Globális/újrahasznosítható modulok INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.admin', 'conference', 'django_registration', 'django_openid_auth', )

Globális/újrahasznosítható modulok INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.admin', 'conference', 'django_registration', 'django_openid_auth', 'django_contact_form', )

from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^/conf/(?p<conf_id>\d+)/$', 'conference.views.conference_page'), (r'^openid/', include('django_openid_auth.urls')), )

Globális/újrahasznosítható modulok django-compressor django-contact-form django-db-log django-debug-toolbar django-extensions django-flatblocks django-gravatar django-oembed django-openid-auth django-proxy django-registration django-tagging django-timezones django-tinymce django-voting django-wikiapp

Remixek Pinax (http://pinaxproject.com/) 37 django-* Mingus (http://github.com/montylounge/django-mingus/) 28 django-*

Hivatkozások http://www.djangoproject.com/ http://docs.djangoproject.com/ http://gábor.20y.hu/django/