15. show_article()
article.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 %}
16. base.html
<!DOCTYPE html>
show_article() <html>
<head>
<title>
article.html {% block title %}
New York Times
{% extends "base.html" %} {% endblock %}
</title>
{% block title %} </head>
New York Times: {{article.title}} <body>
{% endblock %} <header>
...
{% block body %} </header>
<h1>{{article.title}}</h1> <section>
<div class="author"> {% block body %}
By {{article.author.full_name}} {% endblock %}
</div> </section>
{{ article.text }} <footer>
{% endblock %} ...
</footer>
</body>
</html>
17. base.html
<!DOCTYPE html>
show_article() <html>
<head>
<title>
article.html {% block title %}
New York Times
{% extends "base.html" %} {% endblock %}
</title>
{% block title %} </head>
New York Times: {{article.title}} <body>
{% endblock %} <header>
...
{% block body %} </header>
<h1>{{article.title}}</h1> <section>
<div class="author"> {% block body %}
By {{article.author.full_name}} {% endblock %}
</div> </section>
{{ article.text }} <footer>
{% endblock %} ...
</footer>
</body>
</html>
18. {{ article.date|date }} # May 26, 2011
{{ article.date|timesince }} # 3 days ago
{{ article.title|lower }} # bear urinates on mayor
{{ aritcle.html|safe }} # My article
<abbr>HTML</abbr>
Още: http://docs.djangoproject.com/en/dev/ref/templates/builtins/
Можем да си пишем сами: http://docs.djangoproject.com/en/dev/howto/custom-template-tags/
31. 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) би дало същия резултат
36. Миграции със South
• Миграция: Python клас, който изпълнява
промени по структурата на база данни
37. Миграции със South
• Миграция: Python клас, който изпълнява
промени по структурата на база данни
• Структурата на базата данни започва от
нулата и се дефинира чрез поредица от
миграции
38. Миграции със South
• Миграция: Python клас, който изпълнява
промени по структурата на база данни
• Структурата на базата данни започва от
нулата и се дефинира чрез поредица от
миграции
• Консенсус
46. Тестване на уеб приложения
• Не тествайте очевидни неща
• Тестване “от край до край”
47. Тестване на уеб приложения
• Не тествайте очевидни неща
• Тестване “от край до край”
• HTTP тестове
48. Тестване на уеб приложения
• Не тествайте очевидни неща
• Тестване “от край до край”
• HTTP тестове
• Работим с тестови данни
49. Тестване на уеб приложения
• Не тествайте очевидни неща
• Тестване “от край до край”
• HTTP тестове
• Работим с тестови данни
• JS тестове - Selenium и QUnit
50. # 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)
53. Не откривайте топлата вода
• django-debug-toolbar - за да не пишем print(“test”)
• django-registration - регистрация на потребители
54. Не откривайте топлата вода
• django-debug-toolbar - за да не пишем print(“test”)
• django-registration - регистрация на потребители
• django-profile - редакция на профили
55. Не откривайте топлата вода
• django-debug-toolbar - за да не пишем print(“test”)
• django-registration - регистрация на потребители
• django-profile - редакция на профили
• django.contrib.comments - коментари (а ла блог)
56. Не откривайте топлата вода
• django-debug-toolbar - за да не пишем print(“test”)
• django-registration - регистрация на потребители
• django-profile - редакция на профили
• django.contrib.comments - коментари (а ла блог)
• django-extensions - улеснения
57. Не откривайте топлата вода
• django-debug-toolbar - за да не пишем print(“test”)
• django-registration - регистрация на потребители
• django-profile - редакция на профили
• django.contrib.comments - коментари (а ла блог)
• django-extensions - улеснения
• django-jsonfield - речници в SQL
58. Не откривайте топлата вода
• django-debug-toolbar - за да не пишем print(“test”)
• django-registration - регистрация на потребители
• django-profile - редакция на профили
• django.contrib.comments - коментари (а ла блог)
• django-extensions - улеснения
• django-jsonfield - речници в SQL
• sorl-thumbnail - смаляване на картинки
59. Не откривайте топлата вода
• django-debug-toolbar - за да не пишем print(“test”)
• django-registration - регистрация на потребители
• django-profile - редакция на профили
• django.contrib.comments - коментари (а ла блог)
• django-extensions - улеснения
• django-jsonfield - речници в SQL
• sorl-thumbnail - смаляване на картинки
• Още: http://djangopackages.com