Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Uma visão de geral de web com Python & Django

Uma visão de geral de web com Python & Django

Uma pequena demonstração de Python e Django, passando por alguns pontos importantes e contextos para utilizar estas ferramentas. Também uma visão geral da estrutura e fluxo de entrada/saída de um request no Django

Roger Camargo

April 16, 2016
Tweet

More Decks by Roger Camargo

Other Decks in Programming

Transcript

  1. Uma visão geral de web com Roger Camargo GruPy –

    Itapê FATEC – Itapetininga/SP - Abril 2016 & Django
  2. Por que Python? #2 Focar no problema e não na

    sintaxe da linguagem Programar = Lógica + Sintaxe
  3. Por que Python? #3 Alta produtividade Simples de iniciar O.O.,

    Funcional, Estruturada Baterias Inclusas #json #xml #http ...
  4. Por que Python? #4 Usada em diversos nichos Games, Web

    applications, Network Servers, Scientific Computing, Desktop tools, Application Scripting ...
  5. package de.vogella.algorithms.sort.quicksort; public class Quicksort { private int[] numbers; private

    int number; public void sort(int[] values) { // check for empty or null array if (values ==null || values.length==0){ return; } this.numbers = values; number = values.length; quicksort(0, number - 1); } private void quicksort(int low, int high) { int i = low, j = high; // Get the pivot element from the middle of the list int pivot = numbers[low + (high-low)/2]; // Divide into two lists while (i <= j) { // If the current value from the left list is smaller then the pivot // element then get the next element from the left list while (numbers[i] < pivot) { i++; } while (numbers[j] > pivot) { j--; } if (i <= j) { exchange(i, j); i++; j--; } } // Recursion if (low < j) quicksort(low, j); if (i < high) quicksort(i, high); } private void exchange(int i, int j) { int temp = numbers[i]; numbers[i] = numbers[j]; numbers[j] = temp; } } Quicksort em {JAVA}
  6. package de.vogella.algorithms.sort.quicksort; public class Quicksort { private int[] numbers; private

    int number; public void sort(int[] values) { // check for empty or null array if (values ==null || values.length==0){ return; } this.numbers = values; number = values.length; quicksort(0, number - 1); } private void quicksort(int low, int high) { int i = low, j = high; // Get the pivot element from the middle of the list int pivot = numbers[low + (high-low)/2]; // Divide into two lists while (i <= j) { // If the current value from the left list is smaller then the pivot // element then get the next element from the left list while (numbers[i] < pivot) { i++; } while (numbers[j] > pivot) { j--; } if (i <= j) { exchange(i, j); i++; j--; } } // Recursion if (low < j) quicksort(low, j); if (i < high) quicksort(i, high); } private void exchange(int i, int j) { int temp = numbers[i]; numbers[i] = numbers[j]; numbers[j] = temp; } } def quicksort(arr): """ Quicksort a list :type arr: list :param arr: List to sort :returns: list -- Sorted list """ if not arr: return [] pivots = [x for x in arr if x == arr[0]] lesser = quicksort([x for x in arr if x < arr[0]]) greater = quicksort([x for x in arr if x > arr[0]]) return [lesser] + pivots + [greater] Quicksort em Python
  7. len() for item in list: # str, class doSomething() 'x'

    in something # not in name[0] list[0]
  8. # str or list slicing 0 1 2 3 4

    mylist = [5, 3, 'p', 9, 'e'] mylist[-1] # returns ['e'] mylist[:2] # returns [5,3] mylist[2:-1] # returns ['p',9]
  9. # List Comprehension [x for x in range(40) if x%2

    == 0] # Returns # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38]
  10. ''' Fibonacci >>> fib(4) 5 ''' def fib(n): if n

    < 2: return 1 return fib(n-1) + fib(n-2)
  11. # closure def fib(n): if n < 2: return 1

    return fib(n-1) + fib(n-2) def memoize(fn): memo = {} def memoizer(*param1): key = repr(param1) if not key in memo: memo[key] = fn(*param1) return memo[key] return memoizer fib = memoize(fib) fib(5)
  12. # decorator def memoize(fn): ... @memoize def fib(n): if n

    < 2: return 1 return fib(n-1) + fib(n-2) fib(5) Fonte: Fluent Python
  13. # https://github.com/caelum/restfulie-py >>> parameters = {"name":"New product", "price":30} >>> result

    = items.link("self").follow().post(**parameters) >>> print result.code 200
  14. Python >>> import this The Zen of Python, by Tim

    Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. …
  15. Django Migrations $ ./manage.py migrate --list atividades (*) 0001_initial (*)

    0002_update_atividades_registros (*) 0003_update_atividades_adic_ref (*) 0004_auto__chg_field_atividade_detalhe vivareal (*) 0001_initial (*) 0002_auto__chg_field_propertylist_constructed_area cidades (*) 0001_initial (*) 0002_auto__add_bairro__add_regiao (*) 0003_auto__add_field_bairro_nome_popular (*) 0004_auto__chg_field_bairro_regiao__chg_field_cidade ...
  16. # com um virtualenv ativo pip install django django-admin.py startproject

    mysite cd mysite/ ./manage.py runserver Demo #1 mysite
  17. # cria um novo model ./manage.py makemigrations ./manage.py migrate #

    Adiciona o novo model no admin.py Demo #2 CRUD
  18. Entenda as functions Views Use as CBV com cuidado def

    homepage(request): t = loader.get_template(‘myapp/index.html’) c = RequestContext(request) content = t.render(c) return HttpResponse(content)
  19. Crie uma APP para cada coisa Mas cuidado para não

    componentizar o que você nunca irá reutilizar
  20. Referências # Canal do Henrique Bastos https://www.youtube.com/user/henriquebastosnet # Python para

    Zumbis - @fmasanori https://www.youtube.com/watch?v=ioya7nGct-o # Fluent Python - @ramalhoorg http://shop.oreilly.com/product/0636920032519.do