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

Уеб програмиране с Django (лекция 2)

aandr
April 17, 2013

Уеб програмиране с Django (лекция 2)

aandr

April 17, 2013
Tweet

More Decks by aandr

Other Decks in Programming

Transcript

  1. (Data) Model View Template Дефинира типовете и структурата на данните

    Бизнес логика Представяне на данните
  2. @login_required def add_haiku(request): if request.method == "POST": haiku = Haiku(user

    = request.user, text = request.POST.get('text')) haiku.save() return redirect('user-page', username = request.user.username)
  3. <!DOCTYPE html> <html> <head> <title>{{ title }}</title> </head> <body> <h1>{{

    title }}</h1> <p>За мен:</p> <ul> {% for fact in facts %} <li>{{ title }}</li> {% endfor %} </ul> </body> </html>
  4. show_article() {% extends "base.html" %} {% block title %} New

    York Times: {{article.title}} {% endblock %} {% block body %} <h1>{{article.title}}</h1> <div class="author"> By {{article.author.full_name}} </div> {{ article.text }} {% endblock %} article.html
  5. show_article() base.html <!DOCTYPE html> <html> <head> <title> {% block title

    %} New York Times {% endblock %} </title> </head> <body> <header> ... </header> <section> {% block body %} {% endblock %} </section> <footer> ... </footer> </body> </html> {% extends "base.html" %} {% block title %} New York Times: {{article.title}} {% endblock %} {% block body %} <h1>{{article.title}}</h1> <div class="author"> By {{article.author.full_name}} </div> {{ article.text }} {% endblock %} article.html
  6. show_article() base.html <!DOCTYPE html> <html> <head> <title> {% block title

    %} New York Times {% endblock %} </title> </head> <body> <header> ... </header> <section> {% block body %} {% endblock %} </section> <footer> ... </footer> </body> </html> {% extends "base.html" %} {% block title %} New York Times: {{article.title}} {% endblock %} {% block body %} <h1>{{article.title}}</h1> <div class="author"> By {{article.author.full_name}} </div> {{ article.text }} {% endblock %} article.html
  7. {{ article.date|date }} # May 26, 2011 {{ article.date|timesince }}

    # 3 days ago {{ article.title|lower }} # bear urinates on mayor {{ aritcle.html|safe }} # My article &lt;abbr&gt;HTML&lt;/abbr&gt; Още: http://docs.djangoproject.com/en/dev/ref/templates/builtins/ Можем да си пишем сами: http://docs.djangoproject.com/en/dev/howto/custom-template-tags/
  8. JSON { first_name: 'John', last_name: 'Smith', friends: [ { name:

    'Jane Smith', id: 123}, { name: 'Ivana Trump', id: 444}, ], } import json json_text = json.dumps(my_object) my_object_2 = json.loads(json_text)
  9. class User(models.Model): username = models.CharField(max_length=30, unique=True) first_name = models.CharField(max_length=30, blank=True)

    last_name = models.CharField(max_length=30, blank=True) email = models.EmailField(blank=True) password = models.CharField(max_length=128) is_superuser = models.BooleanField(default=False) date_joined = models.DateTimeField( default=datetime.datetime.now)
  10. from django.db import models from django.contrib.auth.models import User class Profile(models.Model):

    user = models.OneToOneField(User) birthdate = models.DateField(blank = True, null = True) nickname = models.CharField(max_length = 255, blank = True, null = True) photo = models.ImageField(blank = True, null = True) phone_number = models.CharField(max_length = 255, blank = True, null = True)) в settings.py добавяме: AUTH_PROFILE_MODULE = 'my_app.Profile' начин на употреба: user = User.objects.get(username = 'jorko4') profile = user.get_profile() print(profile.nickname) * наследяване от типа class Profile(User) би дало същия резултат
  11. Миграции със South • Миграция: Python клас, който изпълнява промени

    по структурата на база данни • Структурата на базата данни започва от нулата и се дефинира чрез поредица от миграции
  12. Миграции със South • Миграция: Python клас, който изпълнява промени

    по структурата на база данни • Структурата на базата данни започва от нулата и се дефинира чрез поредица от миграции • Консенсус
  13. class Migration(SchemaMigration): def forwards(self, orm): db.create_table('haikus_haiku', ( ('id', ...), ('user',

    ...), ('text', ...), ('created', ...), )) def backwards(self, orm): db.delete_table('haikus_haiku') class Migration(SchemaMigration): def forwards(self, orm): def backwards(self, orm):
  14. $ pip install south $ python manage.py syncdb за съществуващи

    приложения: $ python manage.py convert_to_south myapp за нови приложения: $ python manage.py schememigration myapp --initial при следващи промени: $ python manage.py schememigration myapp --auto изпълняване на миграции: $ python manage.py migrate Първоначална миграция
  15. Тестване на уеб приложения • Не тествайте очевидни неща •

    Тестване “от край до край” • HTTP тестове
  16. Тестване на уеб приложения • Не тествайте очевидни неща •

    Тестване “от край до край” • HTTP тестове • Работим с тестови данни
  17. Тестване на уеб приложения • Не тествайте очевидни неща •

    Тестване “от край до край” • HTTP тестове • Работим с тестови данни • JS тестове - Selenium и QUnit
  18. # haikus/admin.py from django.contrib import admin from haikus.models import Haiku

    class HaikuAdmin(admin.ModelAdmin): date_hierarchy = 'created' list_display = ('user', 'text', 'created') admin.site.register(Haiku, HaikuAdmin)
  19. Не откривайте топлата вода • django-debug-toolbar - за да не

    пишем print(“test”) • django-registration - регистрация на потребители
  20. Не откривайте топлата вода • django-debug-toolbar - за да не

    пишем print(“test”) • django-registration - регистрация на потребители • django-profile - редакция на профили
  21. Не откривайте топлата вода • django-debug-toolbar - за да не

    пишем print(“test”) • django-registration - регистрация на потребители • django-profile - редакция на профили • django.contrib.comments - коментари (а ла блог)
  22. Не откривайте топлата вода • django-debug-toolbar - за да не

    пишем print(“test”) • django-registration - регистрация на потребители • django-profile - редакция на профили • django.contrib.comments - коментари (а ла блог) • django-extensions - улеснения
  23. Не откривайте топлата вода • django-debug-toolbar - за да не

    пишем print(“test”) • django-registration - регистрация на потребители • django-profile - редакция на профили • django.contrib.comments - коментари (а ла блог) • django-extensions - улеснения • django-jsonfield - речници в SQL
  24. Не откривайте топлата вода • django-debug-toolbar - за да не

    пишем print(“test”) • django-registration - регистрация на потребители • django-profile - редакция на профили • django.contrib.comments - коментари (а ла блог) • django-extensions - улеснения • django-jsonfield - речници в SQL • sorl-thumbnail - смаляване на картинки
  25. Не откривайте топлата вода • django-debug-toolbar - за да не

    пишем print(“test”) • django-registration - регистрация на потребители • django-profile - редакция на профили • django.contrib.comments - коментари (а ла блог) • django-extensions - улеснения • django-jsonfield - речници в SQL • sorl-thumbnail - смаляване на картинки • Още: http://djangopackages.com