My presentations, using Reveal.js (mostly in Portuguese).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

385 lines
12 KiB

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Entendendo DJANGO</title>
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
<meta name="author" content="Hakim El Hattab">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
<link rel="stylesheet" href="reveal.js/css/reveal.css">
<link rel="stylesheet" href="reveal.js/css/theme/solarized.css" id="theme">
<!-- Code syntax highlighting -->
<link rel="stylesheet" href="reveal.js/lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="lib/js/html5shiv.js"></script>
<![endif]-->
<!-- personal styles -->
<style>
.semi-opaque {
background-color: rgba(0, 0, 0, 0.7);
}
img {
height: 400px;
}
</style>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-background='_images/django-allauth.png' data-header>
<p class='semi-opaque'>
<h1>Django</h1>
<h2>Uma Introdução</h2>
</p>
</section>
<section>
<section>
<img src="_images/AYV1X0yv.png" alt="Me" style="float:left;">
<div>
<ul>
<li>Júlio Biason</li>
<li>CWI Software</li>
<li>@juliobiason</li>
<li>julio.biason@gmail.com</li>
</ul>
</div>
</section>
<section>
<img src="_images/meetings.png" alt="Eu consigo detonar com reuniões" styl>
</section>
</section>
<section>
<section>
<h2>Projeto</h2>
<p>"Projeto" é como Django chama a base do sistema,
que não passa de um conjunto de apps.</p>
<p>Criado com <code>django-admin startproject [PROJECTNAME] .</code>.</p>
</section>
<section>
<h2>Projeto: startproject</h2>
<pre><code class="hljs" data-trim>
project/
├── manage.py
└── project
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
</pre></code>
<aside class="notes">
startproject cria a estrutura do projeto.
manage.py contem a estrutura de execução do projeto
project contém a base do projeto.
settings são as configuração do projeto.
urls define a base das rotas.
wsgi serve para a execução por wsgi.
</aside>
</section>
<section>
<h2>Time out: rodando o servidor de desenvolvimento</h2>
<pre><code class="hljs" data-trim>
$ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
October 24, 2016 - 23:04:50
Django version 1.10.2, using settings 'project.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
</code></pre>
<aside class="notes">
O que diabos aconteceu?
primeiro, "runserver" carrega o servidor de desenvolvimento.
qualquer alteração em arquivos irá recarregar o serviço.
13 migrações não aplicadas; o django já vem com
um conjunto de aplicações.
</aside>
</section>
<section>
<pre><code class="hljs" data-trim>
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying sessions.0001_initial... OK
</code></pre>
<aside class="notes">
fazendo o migrate resolve tudo.
</aside>
</section>
</section>
<section>
<section>
<h2>App</h2>
<p>
App é como o Django chama as pequenas partes que
compõem o sistema.
</p>
<p>
Uma app pode ser entendida como uma tabela, ou um
conjunto de tabelas que trabalham em conjunto ou
conjunto de funções auxiliares.
</p>
</section>
<section>
<h2>App: startapp</h2>
<pre><code class="hljs" data-trim>
django-admin startapp customers
</code></pre>
</section>
<section>
<pre><code class="hljs">
project/
├── customers
   ├── admin.py
   ├── apps.py
   ├── __init__.py
   ├── migrations
     └── __init__.py
   ├── models.py
   ├── tests.py
   └── views.py
├── db.sqlite3
├── manage.py
└── project
├── __init__.py
├── __init__.pyc
├── settings.py
├── settings.pyc
├── urls.py
├── urls.pyc
└── wsgi.py
</code></pre>
</section>
<section>
<h2>App: models.py</h2>
<pre><code class="hljs">
from __future__ import unicode_literals
from django.db import models
class Customer(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
</code></pre>
</section>
<section>
<pre><code class="hljs">
$ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
October 25, 2016 - 21:01:40
Django version 1.10.2, using settings 'project.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
</code></pre>
<aside class="notes">
Cade os migrations?
</aside>
</section>
<section>
<h2>App: Adicionando ao projeto</h2>
<pre><code class="hljs">
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'customers'
]
</code></pre>
</section>
<section>
<pre><code class="hljs">
$ python manage.py makemigrations
Migrations for 'customers':
customers/migrations/0001_initial.py:
- Create model Customer
</code></pre>
<pre><code class="hljs">
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, customers, sessions
Running migrations:
Applying customers.0001_initial... OK
</code></pre>
</section>
<section>
<h2>App: Admin</h2>
<pre><code class="hljs">
from django.contrib import admin
from customers.models import Customer
class CustomerAdmin(admin.ModelAdmin):
pass
admin.site.register(Customer, CustomerAdmin)
</code></pre>
</section>
</section>
<section>
<section>
<h2>Outro App</h2>
<pre><code class="hljs">
from __future__ import unicode_literals
from django.db import models
from customers.models import Customer
class Order(models.Model):
customer = models.ForeignKey(Customer)
date = models.DateField(auto_now_add=True)
def __str__(self):
return '{name} - {items} item'.format(
name=self.customer.name,
items=self.item_set.count())
class Item(models.Model):
order = models.ForeignKey(Order)
item = models.CharField(max_length=30)
qtd = models.PositiveIntegerField()
price = models.DecimalField(max_digits=8, decimal_places=2)
@property
def total(self):
return self.qtd * self.price
</code></pre>
</section>
<section>
<h2>Admin</h2>
<pre><code class="hljs">
from django.contrib import admin
from orders.models import Order
from orders.models import Item
class Itemadmin(admin.TabularInline):
model = Item
class OrderAdmin(admin.ModelAdmin):
inlines = [Itemadmin]
admin.site.register(Order, OrderAdmin)
</code></pre>
</section>
</section>
</div>
</div>
<script src="reveal.js/lib/js/head.min.js"></script>
<script src="reveal.js/js/reveal.js"></script>
<script>
// Full list of configuration options available at:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// Optional reveal.js plugins
dependencies: [
{ src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.configure({languages: ['python']}); hljs.initHighlightingOnLoad(); } },
{ src: 'reveal.js/plugin/zoom-js/zoom.js', async: true },
{ src: 'reveal.js/plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>