Разработка архитектуры веб-сервиса закрытой социальной сети с использованием фреймворка Django
Особенности функционирования закрытых частных социальных сетей, членство в которых доступно только для избранных. Сведение риска потери конфиденциальной информации к минимуму посредством ограничения доступа к социальным сетям. Структура web-приложения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 09.09.2015 |
Размер файла | 1,9 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
else:
# если не залогинен
# хорошо бы сделать из этой проверки декоратор, чтоб всюду её не тоскать за собой
return render_to_response ("friends/error.html", {'ErrorText': u"Вы не авторизированны"})
# Вывод формы для отправки сообщения
@csrf_exempt
def send_message (request, id):
class MessageForm (forms. Form):
title = forms. CharField (max_length=350, required=False)
message = forms. CharField (max_length=350, required=False, widget=forms. Textarea)
#Выбираем отправить личное сообщение, и определяем в бд, что я - покупатель, а тот кому пишу письмо - продавец
friend = User. objects. get (pk = id)
i_am = User. objects. get (pk = request. user. id)
temp1 = Q (recipient = friend) & Q (sender = i_am)
temp2 = Q (recipient = i_am) & Q (sender = friend)
temp3 = temp1 | temp2
temp4 = Q (person2 = i_am) & Q (person1 = friend)
temp5 = Q (person1 = i_am) & Q (person2 = friend)
#Выбрали - отправить личное сообщение, и определяем в бд, что я - person1 и покупатель, а тот кому пишу письмо - person2 и продавец
if len (Chat. objects. filter (temp4 | temp5)) == 0:
chat = Chat ()
chat. person1 = i_am
chat. person2 = friend
chat. save ()
else:
pass
if request. method == 'POST':
all_message = Message. objects. filter (temp3). order_by ('date')
chat_obj = Chat. objects. get (temp4 | temp5)
form = MessageForm (request. POST)
if form. is_valid ():
title = form. cleaned_data ['title']
message = form. cleaned_data ['message']
send_message = Message ()
send_message. recipient = friend
send_message. sender = i_am
send_message. date = datetime. datetime. now ()
send_message. title = title
send_message. message = message
#for elem in send_message:
send_message. reader = False
send_message. save ()
chat_obj. messages. add (send_message)
chat_obj. save ()
return redirect ('/myfriends/sendmessage/'+ str (id) + '/')
else:
all_message = Message. objects. filter (temp3). order_by ('date') [0:: 1]
temp4 = Q (person2 = i_am) & Q (person1 = friend)
temp5 = Q (person1 = i_am) & Q (person2 = friend)
person_type = Chat. objects. filter (temp4 | temp5)
form = MessageForm ()
#Если чувак открыл весь чат, то это значит, что он все сообщения уже прочел
# Которые находятся в переписке => они все устанавливаются в false
send = Message. objects. filter (temp2)
for elem in send:
if not elem. reader:
elem. reader=True
elem. save ()
context = {'form': form, 'friend': friend, 'all_message': all_message}
return render_to_response ('friends/send_message.html', context, context_instance=RequestContext (request))
Шаблон error.html для тех кто не зарегестрировался.
{% extends "main.html" %}
{% block main %}
<div class="left_site_registration">
<h2>Ошибка</h2>
{{ErrorText|safe}}
</div>
{% endblock %}
Шаблон search_person.html для вывода поисковой формы и всех добавленных или тех кто хочет добавиться в друзья
{% extends "main.html" %}
{% block main %}
<div class="right_col_form_contragents">
<h1>Поиск друзей</h1>
<form action="" method="post">
<p class="right_col_form_contragent_log_firm">Фамилия: {{ form. last_name }}</p>
<p class="right_col_form_contragent_log_firm">Имя: {{ form. first_name }}</p>
<p class="right_col_form_contragent_log_firm">Отчество: {{ form. midlle_name }}</p>
<p class="right_col_form_contragent_log_firm">Логин: {{ form. user }}</p>
<input class="right_col_btn" type="submit" value="ПОИСК">
{% for obj in search_result %}
{% if User! = obj %}
<p>{{ obj. last_name }} {{obj. first_name}} {{obj. midlle_name}} {{ obj. user }}</p>
{% if obj in User. friends. all %}
<p>Уже ваш друг! </p>
{% else %}
<p><a class="right_col_form_contragent_blue" href="/friends/add/{{ obj. user. id }}/">Добавить в друзья</a></p>
{% endif %}
{% endif %}
{% endfor %}
{% if User. friends. all %}
<h2>Мои друзья: </h2>
{% for elem in User. friends. all %}
<p>{{ elem }}</p>
<p><a class="right_col_form_contragent_blue" href="/friends/del/{{ elem. user. id }}/">Удалить из друзей</a></p>
<p><a class="right_col_form_contragent_blue" href="/myfriends/sendmessage/{{ elem. user. id }}/">Написать сообщение</a></p>
{% endfor %}
{% endif %}
{% if User. friend_requests. all %}
<h2>К вам хотят добавиться: </h2>
{% for obj in User. friend_requests. all %}
<p>{{ obj }}</p>
<p><a class="right_col_form_contragent_blue" href="/friends/accept/{{ obj. user. id }}/">Принять друга</a></p>
<p><a class="right_col_form_contragent_blue" href="/friends/reject/{{ obj. user. id }}/">Отклонить друга</a></p>
{% endfor %}
{% endif %}
</form>
</div>
{% endblock %}
Шаблон all_message.html для вывода всех сообщений
{% extends "main.html" %}
{% block main %}
<form action="" method="post">
<table class="leftcol_site_list">
<tr class="title_table_left_col">
<td colspan="2">Сообщения</td>
</tr>
{% for elem in all_friend %}
<tr class="right_col_table_message_list {% cycle '' 'tr_blue_color' %}">
<td>
<a href="/myfriends/sendmessage/{% if request. user. id == elem. person1. id %}{{elem. person2. id}}{% else %}
{{elem. person1. id}}{% endif %}/">
{% if request. user. id == elem. person1. id %}
{% if elem. person2. thumbnail == "" %}
<img src="/media/images/default. png"/>
{% else %}
<img id="img-{{ elem. person2. get_min_thumbnail }}" src="{{ elem. person2. get_min_thumbnail }}"/>
{% endif %}
{% else %}
{% if elem. person1. thumbnail == "" %}
<img src="/media/images/default. png"/>
{% else %}
<img id="img-{{ elem. person1. get_min_thumbnail }}" src="{{ elem. person1. get_min_thumbnail }}"/>
{% endif %}
{%endif%}
{% if user. id == elem. person2. id %}
<p>{{ elem. person1 }}</p>
{% else %}
<p>{{ elem. person2 }}</p>
{% endif %}
<div>{{ elem. last_message. date }}</div>
</a>
</td>
<td>
<a href="/myfriends/sendmessage/{% if request. user. id == elem. person1. id %}{{elem. person2. id}}{% else %}
{{elem. person1. id}}{% endif %}/">
<p>{{ elem. last_message. message|truncatechars: 80 }}</p>
</a>
</td>
</tr>
{% endfor %}
</table>
</form>
{% endblock %}
Шаблон send_message.html, для вывода всего чата и формы для отправки нового сообщения.
{% extends "main.html" %}
{% block main %}
<div class="left_col_mail">
<form action="" method="post">
<table class="leftcol_site_list">
<tr class="title_table_left_col">
<td>История сообщений</td>
</tr>
{% for elem in all_message %}
{% if elem. reader %}
<tr bgcolor="#F8F8FF">
{% else %}
<tr bgcolor="#B2DFEE">
{% endif %}
<td class="left_col_mail_message_block">
<div>{{ elem. date }}</div>
<b>
{{ elem. sender }}
<br />
{{ elem. title }}
</b>
<p>{{ elem. message }}</p>
</td>
</tr>
{% endfor %}
</table>
<p>Кому: {{ friend. username }}</p>
<p>Заголовок: </p>
<div>{{ form. title }}</div>
<p>Сообщение: </p>
<div>{{ form. message }}</div>
<input class="left_col_profile_block_accept_button" type="submit" value="Отправить">
</form>
</div>
{% block right %}
{% endblock %}
{% endblock %}
Модель приложения НОВОСТИ models. py
# - * - coding: utf-8 - *-
from django. db import models
from django. contrib. auth. models import User
import datetime
class Comment (models. Model):
name = models. CharField (max_length=350,verbose_name=u'Имя отправителя комментария',blank=True)
mail = models. EmailField (max_length=350,verbose_name=u'E-mail',blank=True)
site = models. URLField (max_length=350,verbose_name=u'Адрес сайта',blank=True, verify_exists=False)
comment = models. TextField (verbose_name=u'Комментарий', blank=True)
class Rubrics (models. Model):
title = models. CharField (max_length=350,verbose_name=u'Заголовок рубрики',blank=True)
slug = models. CharField (max_length=350, verbose_name=u'Перевод на английский')
def __unicode__ (self):
return self. title
class Blog (models. Model):
title = models. CharField (max_length=350,verbose_name=u'Заголовок новости',blank=True)
text_before = models. TextField (verbose_name=u'Начало новости', blank=True)
text_after = models. TextField (verbose_name=u'Окончание новости', blank=True)
date = models. DateTimeField (verbose_name=u'Дата опубликования новости',blank=True, null=True, default = datetime. datetime. now)
rubrics = models. ManyToManyField (Rubrics, verbose_name=u'Рубрики', related_name='rubric', blank=True, null=True)
comments = models. ManyToManyField (Comment, verbose_name=u'Комментарии', related_name='comments', blank=True, null=True)
def __unicode__ (self):
return self. title
Файл views. py для отображения данных на странице НОВОСТИ
# - * - coding: utf-8 - *-
from SA. blog. models import Blog, Rubrics, Comment
from django. views. decorators. csrf import csrf_exempt
from django. shortcuts import render_to_response, redirect
from django. template import RequestContext # нужно чтобы передавать реквест в контекст
from django. forms import ModelForm
from django. http import HttpResponse, HttpResponseRedirect
from django import forms
from django. db. models import Q
from django. contrib. auth. models import User
import datetime
import time
@csrf_exempt
def blog_views (request):
# выводим все новости
ERROR = None
if request. user. is_authenticated ():
news = Blog. objects. all ()
rubric = Rubrics. objects. all ()
date_obj = []
for obj in Blog. objects. dates ('date', 'month'):
date_obj. append (obj. date)
context = {'news': news, 'rubric': rubric, 'date_obj': date_obj }
return render_to_response ("blog/blog.html", context, context_instance=RequestContext (request))
else:
# если не залогинен
# хорошо бы сделать из этой проверки декоратор, чтоб всюду её не тоскать за собой
return render_to_response ("user_profile/error.html", {'ErrorText': u"Вы не авторизированны"})
@csrf_exempt
def new_news (request):
# выводим все новости
ERROR = None
if request. user. is_authenticated ():
class BlogForm (forms. Form):
title = forms. CharField (max_length=150, required=False)
text_before = forms. CharField (max_length=350, required=False, widget=forms. Textarea)
text_after = forms. CharField (max_length=350, required=False, widget=forms. Textarea)
if request. method == 'POST':
form = BlogForm (request. POST)
if form. is_valid ():
title = form. cleaned_data ['title']
text_before = form. cleaned_data ['text_before']
text_after = form. cleaned_data ['text_after']
new = Blog ()
new. title = title
new. text_before = text_before
new. text_after = text_after
new. date = datetime. datetime. now ()
#for elem in send_message:
new. save ()
return redirect ('/blog/')
else:
form = BlogForm ()
context = {'form': form}
return render_to_response ('blog/new_news.html', context, context_instance=RequestContext (request))
else:
# если не залогинен
# хорошо бы сделать из этой проверки декоратор, чтоб всюду её не тоскать за собой
return render_to_response ("user_profile/error.html", {'ErrorText': u"Вы не авторизированны"})
@csrf_exempt
def blog_sort (request, slug):
news = Blog. objects. filter (rubrics__slug=slug)
rubric = Rubrics. objects. all ()
date_obj = []
for obj in Blog. objects. dates ('date', 'month'):
date_obj. append (obj. date)
context = {'news': news, 'rubric': rubric, 'date_obj': date_obj}
return render_to_response ("blog/blog.html", context, context_instance=RequestContext (request))
@csrf_exempt
def blog_sort_date (request, year, month):
news = Blog. objects. filter (date__year=year). filter (date__month=month)
rubric = Rubrics. objects. all ()
date_obj = []
for obj in Blog. objects. dates ('date', 'month'):
date_obj. append (obj. date)
context = {'news': news, 'rubric': rubric, 'date_obj': date_obj}
return render_to_response ("blog/blog.html", context, context_instance=RequestContext (request))
@csrf_exempt
def blog_all_text (request, id):
ERROR = None
if request. user. is_authenticated ():
class CommentForm (forms. Form):
name_user = forms. CharField (max_length=150, required=False, initial = request. user. username)
mail = forms. EmailField (max_length=150, initial=request. user. email)
site = forms. URLField (max_length=150, required=False, verify_exists=False)
comment = forms. CharField (max_length=350, required=False, widget=forms. Textarea)
date_obj = []
for obj in Blog. objects. dates ('date', 'month'):
date_obj. append (obj. date)
if request. method == 'POST':
# Выберем тот объект из модели Blog, которой хотим отправить комментарий
this_new = Blog. objects. get (id = id)
form = CommentForm (request. POST)
if form. is_valid ():
name_user = form. cleaned_data ['name_user']
mail = form. cleaned_data ['mail']
site = form. cleaned_data ['site']
comment = form. cleaned_data ['comment']
model_comment = Comment ()
model_comment. name = name_user
model_comment. mail = mail
model_comment. site = site
model_comment.comment = comment
model_comment. save ()
# Добавляем в новость которую мы сейчас просматриваем новый комментарий
this_new.comments. add (model_comment)
this_new. save ()
return redirect ('/blog/blog_all_text/'+ str (id) + '/')
else:
form = CommentForm ()
news = Blog. objects. get (id = id)
rubric = Rubrics. objects. all ()
context = {'form': form, 'news': news, 'rubric': rubric, 'date_obj': date_obj}
return render_to_response ("blog/blog_all_text.html", context, context_instance=RequestContext (request))
else:
# если не залогинен
# хорошо бы сделать из этой проверки декоратор, чтоб всюду её не тоскать за собой
return render_to_response ("user_profile/error.html", {'ErrorText': u"Вы не авторизированны"})
Шаблон blog.html для главной страницы приложения НОВОСТИ
{% extends "main.html" %}
{% block main %}
<div class="left_col_profile_block">
<form action="" method="post">
Архивы:
{% for obj in date_obj %}
<p><a class="right_col_form_contragent_blue" href="/blog/{{ obj|date: "Y" }}/{{ obj|date: "n" }}">{{ obj|date: "F Y" }}</a></p>
{% endfor %}
<p>_________________________________________________________</p>
<table width="100%" border="0" cellspacing="0" cellpadding="4">
{% for elem in news %}
<tr align="center" bgcolor="#B2DFEE"><p> {{ elem. title }} </p></tr>
<tr align="center">
<p> </p>
<p>{{ elem. text_before }}</p></tr>
<tr align="center">
<p><a class="right_col_form_contragent_blue" href="/blog/blog_all_text/{{ elem. id }}/"> Читать полностью >> </a></p>
</tr>
<tr align="center"><p> {{ elem. date}} </p></tr>
{% endfor %}
</table>
<a class="right_col_form_contragent_blue" href="/blog/new_news/">Отправить сообщение</a>
</form>
</div>
{% endblock %}
Шаблон blog_all_text.html для просмотра всего текста новости и возможности написания комментария.
{% extends "main.html" %}
{% block main %}
<div>
<form action="" method="post">
Архивы:
{% for obj in date_obj %}
<p><a class="right_col_form_contragent_blue" href="/blog/{{ obj|date: "Y" }}/{{ obj|date: "n" }}">{{ obj|date: "F Y" }}</a></p>
{% endfor %}
<p>_________________________________________________________</p>
<table width="100%" border="0" cellspacing="0" cellpadding="4">
<tr align="center" bgcolor="#B2DFEE"><p> {{ news. title }} </p></tr>
<tr align="center">
<p> {{ news. text_before }} </p>
</tr>
<tr align="center">
<p> {{ news. text_after }} </p>
</tr>
<tr align="center"><p> {{ news. date }}</p></tr>
</table>
<table class="leftcol_site_list">
<tr class="title_table_left_col">
<td colspan="2">Комментарии</td>
</tr>
{% for obj in news.comments. all %}
<tr class="right_col_table_message_list {% cycle '' 'tr_blue_color' %}">
<td align="center"> {{ obj. name }}</td>
<td> {{ obj.comment }}</td>
</tr>
{% endfor %}
</table>
<table>
<tr><td> Имя: {{ form. name_user }}</td></tr>
<tr><td> Комментарии: {{ form.comment }}</td></tr>
</table>
<input type="submit" value="Отправить">
</form>
</div>
{% endblock %}
Шаблон new_news.html для опубликования новой новости.
{% extends "main.html" %}
{% block main %}
<div class="left_col_profile_block">
<h2>Новая запись</h2>
<img src="/media/images/default. png"/>
<form action="" method="post">
<h4>Заголовок</h4>
<p>{{form. title. label}}{{form. title}}</p>
<h4>Первая часть новости</h4>
<p>{{form. text_before. label}}{{form. text_before}}</p>
<h4>Вторая часть новости</h4>
<p>{{form. text_after. label}}{{form. text_after}}</p>
<input class="left_col_profile_block_accept_button" type="submit" value="Сохранить">
</form>
</div>
{% endblock %}
Размещено на Allbest.ru
Подобные документы
Анализ корпоративных сетей, определение их преимуществ и недостатков: ASmallWorld, Decayenne и Evrika. Структура web-приложения, методика и принципы его разработки, оценка практической эффективности. База данных и административная, логическая часть.
дипломная работа [837,6 K], добавлен 03.02.2015Django — свободный фреймворк для веб-приложений на языке Python, использующий шаблон проектирования MVC. Архитектура и основные компоненты приложения. Главные компоненты среды разработки Django. Некоторые возможности и взаимосвязь компонентов фреймворка.
реферат [23,7 K], добавлен 18.01.2015Основные принципы организации сетей абонентского доступа на базе PLC-технологии. Угрозы локальным сетям, политика безопасности при использовании технологии PLC. Анализ функционирования PLC здания инженерно-внедренческого центра ООО "НПП "Интепс Ком".
дипломная работа [3,0 M], добавлен 25.11.2012Компоненты приложения Vue.js, использование шаблона MVVM. Характеристика Webpack и фреймворка NuxtJs. Python как язык программирования, модель MVC, компоненты и инструментарий фреймворка Django. Технология программирования Object Relational Mapping.
контрольная работа [296,4 K], добавлен 22.03.2017Use case-диаграмма. Оценка трудоёмкости и сроков разработки проекта с использованием языка Python по методикам CETIN И COCOMO-II. Проектирование информационной системы. Разработка приложения с использованием Django: создание шаблонов, моделей и пр.
дипломная работа [1,3 M], добавлен 10.07.2017Разработка системы мониторинга пользовательских запросов в крупной социальной сети - ООО "В Контакте". Анализ маркетингового положения компании в сфере социальных сетей. Характеристика потребительского сегмента. Техническая поддержка социальных сетей.
дипломная работа [3,0 M], добавлен 25.10.2015Обзор рынка мобильных приложений, социальных сетей, аналогов. Обзор инструментов разработки: Android Studio, Microsoft visual С# 2012, PostgreeSQL, API Открытых данных Вологодской области, API Социальных сетей. Программный код, разработка интерфейса.
дипломная работа [2,6 M], добавлен 10.07.2017Типы социальных сетей, их влияние на современного человека. Тенденции и перспективы развития социальных сетей. Внедрение в повседневную жизнь мобильных интернет-технологий. Анализ социальной сети на примере VK.com - крупнейшей в Рунете социальной сети.
курсовая работа [48,0 K], добавлен 07.08.2013Характерные особенности социальной сети. Описание социальных сетей "Facebook", "Вконтакте", "Одноклассники". Разработка собственного подобного сайта, с регистрацией профилей, загрузкой изображений, отправкой сообщений, поиском, разграничением приватности.
курсовая работа [1,9 M], добавлен 30.01.2014Разработка проводной локальной сети и удаленного доступа к данной сети с использованием беспроводной сети (Wi-Fi), их соединение между собой. Расчет времени двойного оборота сигнала сети (PDV). Настройка рабочей станции, удаленного доступа, сервера.
курсовая работа [2,0 M], добавлен 10.11.2010