Главная » 2015 » Ноябрь » 15 » Покоряем DJANGO.
00:18
Покоряем DJANGO.

Django - фреймворк для написания веб приложений

Лучший вариант изучить и понять правила создания веб-сайтов и приложений посмотреть обучающее видео.https://www.youtube.com/watch?v=QgdINlxm-wE. Если вы пройдете все видео уроки по созданию первого простого блога, то получите по меньшей мере, исходный код сайта который можно будет изменять и корректировать на своё усмотрение. В комментариях восьмого урока есть ссылка на рабочий код автора. Кому интересно как можно этот код превратить в более совершенный блог предлагаю свои варианты.

Первое с чего я начал - это лайки. В уроках при добавлении лайка нас выбрасывает на первую страницу блога при любых вариантах. В привычных нам веб страницах мы видим добавления лайка, т.е. остаемся на этой же странице. И так, как это сделать? Для начала разберем что происходит при клике на рисунок лайка:

1. при наведения курсора на лайк нам подсвечивается url куда мы сейчас перейдем

2. кликаем на лайк -через urls.py по указанному адресу переходим в  views.py на указанную функцию. 

3. в  views.py на указанной функции выводим через returne новую страницу по url

вот так первоначально выглядит код:

def addlike(request, article_id):
    try:
        if article_id in request.COOKIES:
            redirect('/')
        else:
            article = Article.objects.get(id=article_id)
            article.article_likes += 1
            article.save()
            response = redirect('/')
            response.set_cookie(article_id, "test")
            return response
    except ObjectDoesNotExist:
        raise Http404
    return redirect('/')

Нам необходимо после динамической обработки страницы( адрес-добавить лайк) вернуться на предыдущий адрес, ту страницу где были раньше. Код будет выглядеть так:

def addlike(request, article_id):
 try:
 if article_id in request.COOKIES:
 return_path = request.META.get('HTTP_REFERER','/')
 return redirect(return_path)
 else:
 article = Article.objects.get(id=article_id)
 article.article_likes += 1
 article.save()
 return_path = request.META.get('HTTP_REFERER','/')

 response = redirect(return_path)
 response.set_cookie( article_id,"test")
 return response
 except ObjectDoesNotExist:
 raise Http404
 return redirect('/')

В выше приведенном коде строка:

return_path = request.META.get('HTTP_REFERER','/')

означает-" переменной return_path присваиваем значение - вернуться на предыдущую страницу". И в возврате функции мы переходим по этому пути( т. е. остаемся на адресе где добавляли лайк), исключение составляет случай бланка ошибки - вэтом случае переходим на стартовую страницу блога.

      Следующее , что я сделал - это отобразил в комментариях кто его добавил и дату комментария.

Для этого необходимо изначально в модели комментариев определить два поля:1 поле автора и 2. поле даты создания комментария.

код класса комментария в модели стал выглядеть так:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class Article(models.Model):
 class Meta():
 db_table = 'article'

 article_title = models.CharField(max_length=200)
 article_text = models.TextField()
 article_date = models.DateField()
 article_likes = models.IntegerField(default=0)
 def __unicode__(self):
 return self.article_title

class Comments(models.Model):
 class Meta():
 db_table = 'comments'

 comments_text = models.TextField(verbose_name="Текст комментария")
 comments_date = models.DateField(u'date',auto_now=True)
 comments_article = models.ForeignKey(Article)
 comments_author = models.ForeignKey(User)

После обновления базы данных (или создания ее ) необходимо добавить поля автора и даты в шаблон страницы.Код файла

article.html

 

{% extends 'main.html' %}

{% block article %}

<h4>{{ article.article_date }}</h4>
<h2>{{ article.article_title }}</h2>
<p>{{ article.article_text }}</p>
<hr>
<div class="large-offset-1 large-8 columns">
<p>Комментарии:</p>
<div height="1" style="border-bottom: 1px dotted #000033; "></div>
    {%  for comment in comments %}
    <p>{{ comment.comments_text }}</p>
    <p align="right"> {{ comment.comments_author.username}} -{{comment.comments_date}}</p>
<div height="1" style="border-bottom: 1px dotted #000033; "></div>

    {% endfor %}
    {% if username %}
    <form action="/articles/addcomment/{{ article.id }}/" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" class="button" value="Добавить комментарий">
    </form>
    {% endif %}

 </div>
{%  endblock %}

и добавить в views.py(article) 

def addcomment(request, article_id):
 if request.POST and ("pause" not in request.session):
 form = CommentForm(request.POST)
 if form.is_valid():

 comment = form.save(commit=False)
 comment.comments_author = request.user # ! получить пользователя !
 comment.comments_article = Article.objects.get(id=article_id)


 form.save()
 request.session.set_expiry(60)
 request.session['pause'] = True
 return redirect('/articles/get/%s/' % article_id)

Теперь у нас можно будет увидеть кто и когда добавил комментарий. Следующее, что я сделал - это добавил возможность вставлять картинки и фото на страницу и установил редактор html , но это уже следующая история...

Просмотров: 593 | Добавил: kuzma | Рейтинг: 4.0/1
Всего комментариев: 0
avatar

Сайт создан для помощи тем, кто делает первые шаги в программировании.

- автор идеи Кузьма Кузин

Возможность бесплатного доступа ко всем материалам и скриптам.

-совместная работа с группой молодых программистов

Срипты для автоматического заработка на SEO сайтах.

- для всех пользователей всё по цене в 1 EUR