Разработка архитектуры веб-сервиса закрытой социальной сети с использованием фреймворка 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


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.