Date post: | 02-Jul-2015 |
Category: |
Technology |
Upload: | rmalik2 |
View: | 553 times |
Download: | 0 times |
Web Frameworks
By: Rahul Malik
What are they?
• In my opinion - “A software framework that is meant to remove the everyday pain and redundancy of web development.”
Awesome, what are my options??
Ruby on Rails (RoR)• Made at 37 Signals by
DHH
• Paved the way for framework development in many other languages
• Written in Ruby
• Credited with people finding out about ruby
!"#$%&'&$ ())* +,
Django
• Written in Python
• Similar philosophies as Rails except they stress modularity
• Made in Kansas at The World Company
!"#$%&'&$ ())* +,
-$./0#12
345&645#$12
Why do we need them?• Web Programming was a black art
• Bad Practices were formed
• High coupling of components
• Mind numbing processes had to be done repeatedly. (i.e. CRUD pages)
• Infrastructure specific (switching to Oracle = pain)
How do they fix these problems?
Model View Controller Design
Model Controller View
Model
Database Management
• Object Relational Mapping (ORM)
• Switching to another database type is just changing a flag
• Transaction support as well as database migrations
Database Management
class Entry(models.Model): pub_date = models.DateTimeField() slug = models.SlugField(unique_for_date='pub_date') headline = models.CharField(maxlength=200) summary = models.TextField(help_text="Use raw HTML.") body = models.TextField(help_text="Use raw HTML.") author = models.CharField(maxlength=100)
Entry.objects.get(headline=’framework talk’)
Entry.objects.filter(pub_date=datetime.now())
View
Template Systems!
• Simple systems that can be used to generate HTML, CSS, RSS, or any other text based formats
• Controller provides context and separation from model
• Good for designers
Template Systems
{% extends "creator/base.html" %}{% block content %}<h1>User Settings</h1><h2>{{ user.username }}</h2><form action="." method="post">{{ form.as_p }}<input type="submit" value="Save Changes" /></form>{% endblock %}
Controller
Sexy URL’s
• blog.php?month=11&day=19&year=2008
• blog/11/19/2008/
Request Routing
• All HTTP Requests get mapped to a controller or 404 by naming conventions (rails) or regex matching (django)
• domain.com/blog/view/getvar1/getvar2/...
• '^(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\w{1,2})/(?P<slug>[\w-]+)/$'
Request Routing
• Naming Conventions vs. Regex Matching
• What else to you get?
• GET, POST variables, as much HTTP Header information that you could want
URL Matching (Regex)
from feeds.views import publish_templatized_feed_item, publish_feed_item, refresh_feed
urlpatterns = patterns('', (r'^publish/$', publish_feed_item), (r'^publish/template/$', publish_templatized_feed_item), (r'^refresh/$', refresh_feed))
URL Matching (regex)urlpatterns = patterns('django.views.generic.date_based',
(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\w{1,2})/(?P<slug>[\w-]+)/$', 'object_detail', dict(info_dict, slug_field='slug')),
(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\w{1,2})/$', 'archive_day', info_dict),
(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$', 'archive_month', info_dict),
(r'^(?P<year>\d{4})/$', 'archive_year', info_dict),
(r'^/?$', 'archive_index', info_dict),)
Freebies
Automation
• CRUD or Admin interfaces
• Schema Upgrades and Downgrades (Migrations)
• Generating Frequent Components (new controller, model, etc.)
Security
• Authorization and Authentication of users built-in!
• Permissions Models
• Basic Web Security at it’s core (SQL Injection, CSRF, etc.)
Caching
• Simple hooks and/or helpers baked in
• Flat-File, Database, or Distributed (memcached) database management
But does it scale?
Yes
Any Other Questions?