def password_reset_view(request): """Allow users to recover their account when they lost their passwords. Returns: HttpResponse """ error = None if request.method == 'POST': form = LostPasswordForm(request.POST) if form.is_valid(): data = form.data try: user = User.objects.get(email=data['email']) except User.DoesNotExist: user = None if user is not None: token = create_forgot_password_token(user) send_mail_to_confirm_password_reset(token) return render_template('member/password_reset_confirm.html') else: error = 'Utilisateur introuvable avec cette adresse.' else: form = LostPasswordForm() return render_template('member/password_reset.html', { 'form': form, 'error': error })
def settings_account(request): """Set current user's account settings. Returns: HttpResponse """ if request.method == 'POST': form = ChangePasswordForm(request.user, request.POST) if form.is_valid(): request.user.set_password(form.data['password_new']) request.user.save() messages.success(request, u'Le mot de passe a bien été modifié.') return redirect('/membres/parametres/profil') else: return render_template('member/settings_account.html', { 'form': form }) else: form = ChangePasswordForm(request.user) return render_template('member/settings_account.html', { 'form': form })
def register_view(request): """Allow new users to register, creating them an account. Returns: HttpResponse """ if request.method == "POST": form = RegisterForm(request.POST) if form.is_valid(): data = form.data user = User.objects.create_user(data["username"], data["email"], data["password"]) user.backend = "django.contrib.auth.backends.ModelBackend" user.is_active = False user.save() profile = Profile(user=user, show_email=False) profile.save() # We generate a new activation key for the user and save it token = create_activation_token(user) send_mail_to_confirm_registration(token) return render_template("member/register_confirmation.html") else: return render_template("member/register.html", {"form": form}) form = RegisterForm() return render_template("member/register.html", {"form": form})
def settings_account(request): """Set current user's account settings. Returns: HttpResponse """ if request.method == 'POST': form = ChangePasswordForm(request.user, request.POST) if form.is_valid(): request.user.set_password(form.data['password_new']) request.user.save() messages.success(request, u'Le mot de passe a bien été modifié.') return redirect('/membres/parametres/profil') else: return render_template('member/settings_account.html', {'form': form}) else: form = ChangePasswordForm(request.user) return render_template('member/settings_account.html', {'form': form})
def edit_post(request, post_pk): """Edit a specific post. Returns: HttpResponse """ post = get_object_or_404(Post, pk=post_pk) # If we are editing the first post, we also want to edit the topic g_topic = None if post.position_in_topic == 1: g_topic = get_object_or_404(Topic, pk=post.topic.pk) by_staff = (post.author != request.user) \ and request.user.has_perm('forum.change_post') # - non-moderated posts may be edited by their author or moderators; # - moderated posts only by moderators if (post.author != request.user) \ and not by_staff: raise PermissionDenied if by_staff and request.method == 'GET': messages.add_message( request, messages.WARNING, u'Vous vous apprêtez à éditer un message en tant que modérateur ' u'(auteur : {}).' .format(post.author.username)) if request.method == 'POST': # Using the preview button if 'preview' in request.POST: if g_topic: g_topic = Topic(title=request.POST['title'], subtitle=request.POST['subtitle']) return render_template('forum/edit_post.html', { 'post': post, 'topic': g_topic, 'text': request.POST['text'], }) # Else save changes to database post.text = request.POST['text'] post.update = datetime.now() post.save() # Modifying the thread info if first post if g_topic: g_topic.title = request.POST['title'] g_topic.subtitle = request.POST['subtitle'] g_topic.save() return redirect(post.get_absolute_url()) else: return render_template('forum/edit_post.html', { 'post': post, 'topic': g_topic, 'text': post.text })
def new(request, forum_pk): """Creates a new topic in a forum. Returns: HttpResponse """ forum = get_object_or_404(Forum, pk=forum_pk) if request.method == 'POST': form = TopicForm(request.POST) if 'preview' in request.POST: return render_template('forum/new.html', { 'forum': forum, 'form': form, 'text': form.data['text'] }) if form.is_valid(): data = form.data # Creating the thread n_topic = Topic() n_topic.forum = forum n_topic.title = data['title'] n_topic.subtitle = data['subtitle'] n_topic.pubdate = datetime.now() n_topic.author = request.user n_topic.save() # Adding the first message post = Post() post.topic = n_topic post.author = request.user post.text = data['text'] post.pubdate = datetime.now() post.position_in_topic = 1 post.save() # Updating the topic n_topic.last_message = post n_topic.save() # Make the current user to follow his created topic follow(n_topic) return redirect(n_topic.get_absolute_url()) else: form = TopicForm() return render_template('forum/new.html', { 'form': form, 'forum': forum })
def edit_extract(request): """Edit an extract. Returns: HttpResponse """ try: extract_pk = request.GET['extrait'] except KeyError: raise Http404 extract = get_object_or_404(Extract, pk=extract_pk) b = extract.chapter.part if b and (request.user not in extract.chapter.part.tutorial.authors.all())\ or not b and (request.user not in extract.chapter.tutorial.authors.all()): raise Http404 if request.method == 'POST': form = EditExtractForm(request.POST) if 'preview' in request.POST: return render_template('tutorial/edit_extract.html', { 'form': form, 'text': form.data['text'], 'extract': extract }) if form.is_valid(): data = form.data extract.title = data['title'] extract.text = data['text'] extract.save() tutorial = extract.chapter.get_tutorial() tutorial.update = datetime.now() tutorial.save() return redirect(extract.get_absolute_url()) else: form = EditExtractForm({ 'title': extract.title, 'text': extract.text }) return render_template('tutorial/edit_extract.html', { 'extract': extract, 'form': form })
def add_extract(request): """Add an extract. Returns: HttpResponse """ try: chapter_pk = int(request.GET['chapitre']) except KeyError: raise Http404 chapter = get_object_or_404(Chapter, pk=chapter_pk) notify = None if request.method == 'POST': form = ExtractForm(request.POST) if 'preview' in request.POST: return render_template('tutorial/new_extract.html', { 'chapter': chapter, 'form': form, 'notify': notify, 'text': form.data['text'] }) if form.is_valid(): data = form.data extract = Extract() extract.chapter = chapter extract.position_in_chapter = chapter.get_extract_count() + 1 extract.title = data['title'] extract.text = data['text'] extract.save() tutorial = extract.chapter.get_tutorial() tutorial.update = datetime.now() tutorial.save() if 'submit_continue' in request.POST: form = ExtractForm() messages.success( request, u'Extrait « {0} » ajouté avec succès.' .format(extract.title)) else: return redirect(extract.get_absolute_url()) else: form = ExtractForm() return render_template('tutorial/new_extract.html', { 'chapter': chapter, 'form': form, 'notify': notify })
def new(request, forum_pk): """Creates a new topic in a forum. Returns: HttpResponse """ forum = get_object_or_404(Forum, pk=forum_pk) if request.method == 'POST': form = TopicForm(request.POST) if 'preview' in request.POST: return render_template('forum/new.html', { 'forum': forum, 'form': form, 'text': form.data['text'] }) if form.is_valid(): data = form.data # Creating the thread n_topic = Topic() n_topic.forum = forum n_topic.title = data['title'] n_topic.subtitle = data['subtitle'] n_topic.pubdate = datetime.now() n_topic.author = request.user n_topic.save() # Adding the first message post = Post() post.topic = n_topic post.author = request.user post.text = data['text'] post.pubdate = datetime.now() post.position_in_topic = 1 post.save() # Updating the topic n_topic.last_message = post n_topic.save() # Make the current user to follow his created topic follow(n_topic) return redirect(n_topic.get_absolute_url()) else: form = TopicForm() return render_template('forum/new.html', {'form': form, 'forum': forum})
def settings_profile(request): """Set current user's profile settings. Returns: HttpResponse """ # Extra information about the current user profile = Profile.objects.get(user=request.user) if request.method == 'POST': form = ProfileForm(request.user, request.POST) if form.is_valid(): profile.biography = form.data['biography'] profile.site = form.data['site'] profile.show_email = 'show_email' in form.data profile.avatar_url = form.data['avatar_url'] profile.mail_on_private_message = \ 'mail_on_private_message' in form.data profile.save() messages.success(request, u'Le profil a correctement été mis à jour.') return redirect('/membres/parametres/profil') else: return render_template('member/settings_profile.html', {'form': form}) else: form = ProfileForm(request.user, initial={ 'biography': profile.biography, 'site': profile.site, 'avatar_url': profile.avatar_url, 'show_email': profile.show_email, 'mail_on_private_message': profile.mail_on_private_message }) return render_template('member/settings_profile.html', {'form': form})
def index(request): """Display list of registered users. Returns: HttpResponse """ members = User.objects.order_by('-date_joined') paginator = Paginator(members, settings.MEMBERS_PER_PAGE) page = request.GET.get('page') try: shown_members = paginator.page(page) page = int(page) except PageNotAnInteger: shown_members = paginator.page(1) page = 1 except EmptyPage: shown_members = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template('member/index.html', { 'members': shown_members, 'members_count': members.count(), 'pages': paginator_range(page, paginator.num_pages), 'nb': page, })
def edit_profile(request): """Edit an user's profile. Returns: HttpResponse """ try: profile_pk = int(request.GET["profil"]) profile = get_object_or_404(Profile, pk=profile_pk) except KeyError: profile = get_object_or_404(Profile, user=request.user) # Making sure the user is allowed to do that if not request.user == profile.user: raise PermissionDenied if request.method == "POST": form = ProfileForm(request.POST) if form.is_valid(): data = form.data profile.biography = data["biography"] profile.site = data["site"] profile.user.email = data["email"] profile.show_email = "show_email" in data # Save the user and it's associated profile profile.user.save() profile.save() return redirect(profile.get_absolute_url()) else: raise Http404 else: return render_template("member/edit_profile.html", {"profile": profile})
def index(request): """Display list of registered users. Returns: HttpResponse """ members = User.objects.order_by("-date_joined") paginator = Paginator(members, settings.MEMBERS_PER_PAGE) page = request.GET.get("page") try: shown_members = paginator.page(page) page = int(page) except PageNotAnInteger: shown_members = paginator.page(1) page = 1 except EmptyPage: shown_members = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template( "member/index.html", { "members": shown_members, "members_count": members.count(), "pages": paginator_range(page, paginator.num_pages), "nb": page, }, )
def view_chapter(request, tutorial_pk, tutorial_slug, part_slug, chapter_slug): """Display a chapter. Returns: HttpResponse """ chapter = get_object_or_404(Chapter, slug=chapter_slug, part__slug=part_slug, part__tutorial__pk=tutorial_pk) tutorial = chapter.get_tutorial() if not tutorial.is_visible \ and not request.user.has_perm('tutorial.modify_chapter') \ and request.user not in tutorial.authors.all(): if not (tutorial.is_beta and request.user.is_authenticated()): raise PermissionDenied if not tutorial_slug == slugify(tutorial.title)\ or not part_slug == slugify(chapter.part.title)\ or not chapter_slug == slugify(chapter.title): return redirect(chapter.get_absolute_url()) return render_template('tutorial/view_chapter.html', { 'chapter': chapter })
def index(request): """Display tutorials list. Returns: HttpResponse """ tutorials = Tutorial.objects.all() \ .filter(is_visible=True) \ .order_by('-pubdate')[:5] pending_tutorials = None if request.user.has_perm('tutorial.change_tutorial'): pending_tutorials = Tutorial.objects.filter(is_pending=True) categories = TutorialCategory.objects.all() try: random_tuto = Tutorial.objects.all() \ .filter(is_visible=True) \ .order_by('?')[0] except IndexError: random_tuto = None return render_template('tutorial/index.html', { 'tutorials': tutorials, 'pending_tutorials': pending_tutorials, 'categories': categories, 'random_tuto': random_tuto })
def tags(request): ct = ContentType.objects.get( app_label='tutorial', model='tutorial' ) tagged_items = TaggedItem.objects \ .filter(content_type=ct) visible_tags = {} for item in tagged_items: tutorial = Tutorial.objects.get(id=item.object_id) if tutorial.is_visible or (request.user.is_authenticated() and tutorial.is_beta): cur = str(item.tag) if cur in visible_tags: visible_tags[cur] += 1 else: visible_tags[cur] = 1 # create dict of tags for sorting and easier acces in the template ret = [] for key in visible_tags: ret.append({'name': key, 'value': visible_tags[key]}) ret.sort(key=lambda k: k['value'], reverse=True) # sort by nb of occurence return render_template('tutorial/tags.html', { 'tags': ret })
def moderation_post(request, post_pk): """Displays an useful toolbox for staff on a specific post. Args: post_pk: the post to act on """ if not request.user.has_perm('forum.change_post'): raise PermissionDenied post = get_object_or_404(Post, pk=post_pk) if request.method == 'POST' and 'action' in request.POST: action = request.POST['action'] # Empty string because moderation_text field is NOT NULL justify_text = '' if 'justify_text' in request.POST and request.POST['justify_text']: justify_text = request.POST['justify_text'] if action == 'hide': post.is_moderated = True post.moderation_time = datetime.now() post.moderation_text = justify_text post.moderated_by = request.user post.save() return redirect(post.get_absolute_url()) return render_template('forum/moderation/post.html', { 'post': post })
def edit_profile(request): """Edit an user's profile. Returns: HttpResponse """ try: profile_pk = int(request.GET['profil']) profile = get_object_or_404(Profile, pk=profile_pk) except KeyError: profile = get_object_or_404(Profile, user=request.user) # Making sure the user is allowed to do that if not request.user == profile.user: raise PermissionDenied if request.method == 'POST': form = ProfileForm(request.POST) if form.is_valid(): data = form.data profile.biography = data['biography'] profile.site = data['site'] profile.user.email = data['email'] profile.show_email = 'show_email' in data # Save the user and it's associated profile profile.user.save() profile.save() return redirect(profile.get_absolute_url()) else: raise Http404 else: return render_template('member/edit_profile.html', {'profile': profile})
def index(request): """Display messages of the user. Returns: HttpResponse """ # Delete using checkboxes if request.method == 'POST': if 'delete' in request.POST: delete_selected_inbox_messages(request) privatetopics = PrivateTopic.objects.all()\ .filter(Q(participants__in=[request.user]) | Q(author=request.user)) \ .distinct() \ .order_by('-last_message__pubdate') # Paginator paginator = Paginator(privatetopics, settings.TOPICS_PER_PAGE) page = request.GET.get('page') try: shown_privatetopics = paginator.page(page) page = int(page) except PageNotAnInteger: shown_privatetopics = paginator.page(1) page = 1 except EmptyPage: shown_privatetopics = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template('messages/index.html', { 'privatetopics': shown_privatetopics, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def new_gallery(request): """Create a new gallery. Returns: HttpResponse """ if request.method == 'POST': form = GalleryForm(request.POST) if form.is_valid(): data = form.data # Creating the gallery gal = Gallery() gal.title = data['title'] gal.subtitle = data['subtitle'] gal.slug = slugify(data['title']) gal.pubdate = datetime.now() gal.save() # Attach user userg = UserGallery() userg.gallery = gal userg.mode = 'W' userg.user = request.user userg.save() return redirect(gal.get_absolute_url()) else: form = GalleryForm() return render_template('gallery/new_gallery.html', {'form': form})
def moderation_post(request, post_pk): """Displays an useful toolbox for staff on a specific post. Args: post_pk: the post to act on """ if not request.user.has_perm('forum.change_post'): raise PermissionDenied post = get_object_or_404(Post, pk=post_pk) if request.method == 'POST' and 'action' in request.POST: action = request.POST['action'] # Empty string because moderation_text field is NOT NULL justify_text = '' if 'justify_text' in request.POST and request.POST['justify_text']: justify_text = request.POST['justify_text'] if action == 'hide': post.is_moderated = True post.moderation_time = datetime.now() post.moderation_text = justify_text post.moderated_by = request.user post.save() return redirect(post.get_absolute_url()) return render_template('forum/moderation/post.html', {'post': post})
def publications(request): """Show current user's tutorials. Returns: HttpResponse """ tutorials = Tutorial.objects \ .filter(authors=request.user) # Handle filter, if any active_filter = 'all' if 'filtre' in request.GET: if request.GET['filtre'] == 'beta': active_filter = 'beta' tutorials = tutorials.filter(is_beta=True) elif request.GET['filtre'] == 'publie': tutorials = tutorials.filter(is_visible=True) active_filter = 'published' # Finally order by pubdate tutorials = tutorials.order_by('-pubdate') return render_template('member/publications.html', { 'user_tutorials': tutorials, 'active_filter': active_filter })
def followed_topics(request): """Displays all the topics followed by an user. Returns: HttpResponse """ followed_topics = Profile.objects.get(user=request.user)\ .get_followed_topics() # Paginator paginator = Paginator(followed_topics, settings.FOLLOWED_TOPICS_PER_PAGE) page = request.GET.get('page') try: shown_topics = paginator.page(page) page = int(page) except PageNotAnInteger: shown_topics = paginator.page(1) page = 1 except EmptyPage: shown_topics = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template( 'forum/followed_topics.html', { 'followed_topics': shown_topics, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def find_post(request, name): """Find all posts written by an user. Returns: HttpResponse """ u = get_object_or_404(User, username=name) posts = Post.objects.all().filter(author=u)\ .order_by('-pubdate') paginator = Paginator(posts, settings.POSTS_PER_PAGE) page = request.GET.get('page') try: shown_posts = paginator.page(page) page = int(page) except PageNotAnInteger: shown_posts = paginator.page(1) page = 1 except EmptyPage: shown_posts = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template( 'forum/find_post.html', { 'posts': shown_posts, 'usr': u, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def find_topic(request, name): """Find all topics created by an user. Returns: HttpResponse """ u = get_object_or_404(User, username=name) topics = Topic.objects.all().filter(author=u)\ .order_by('-pubdate') # Paginator paginator = Paginator(topics, settings.TOPICS_PER_PAGE) page = request.GET.get('page') try: shown_topics = paginator.page(page) page = int(page) except PageNotAnInteger: shown_topics = paginator.page(1) page = 1 except EmptyPage: shown_topics = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template( 'forum/find_topic.html', { 'topics': shown_topics, 'usr': u, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def edit_image(request, gal_pk, img_pk): """Edit an image. Returns: HttpResponse """ gal = get_object_or_404(Gallery, pk=gal_pk) img = get_object_or_404(Image, pk=img_pk) if request.method == 'POST': form = EditImageForm(request.POST) if form.is_valid(): img.title = request.POST['title'] img.legend = request.POST['legend'] img.update = datetime.now() img.save() # Redirect to the document list after POST return redirect(gal.get_absolute_url()) else: form = EditImageForm(initial={ 'title': img.title, 'legend': img.legend }) return render_template('gallery/edit_image.html', { 'form': form, 'gallery': gal, 'image': img })
def index(request): """Display list of registered users. Returns: HttpResponse """ members = User.objects.order_by('-date_joined') paginator = Paginator(members, settings.MEMBERS_PER_PAGE) page = request.GET.get('page') try: shown_members = paginator.page(page) page = int(page) except PageNotAnInteger: shown_members = paginator.page(1) page = 1 except EmptyPage: shown_members = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template( 'member/index.html', { 'members': shown_members, 'members_count': members.count(), 'pages': paginator_range(page, paginator.num_pages), 'nb': page, })
def followed_topics(request): """Displays all the topics followed by an user. Returns: HttpResponse """ followed_topics = request.user.get_profile().get_followed_topics() # Paginator paginator = Paginator(followed_topics, settings.FOLLOWED_TOPICS_PER_PAGE) page = request.GET.get('page') try: shown_topics = paginator.page(page) page = int(page) except PageNotAnInteger: shown_topics = paginator.page(1) page = 1 except EmptyPage: shown_topics = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template('forum/followed_topics.html', { 'followed_topics': shown_topics, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def find_post(request, name): """Find all posts written by an user. Returns: HttpResponse """ u = get_object_or_404(User, username=name) posts = Post.objects.all().filter(author=u)\ .order_by('-pubdate') paginator = Paginator(posts, settings.POSTS_PER_PAGE) page = request.GET.get('page') try: shown_posts = paginator.page(page) page = int(page) except PageNotAnInteger: shown_posts = paginator.page(1) page = 1 except EmptyPage: shown_posts = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template('forum/find_post.html', { 'posts': shown_posts, 'usr': u, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def find_topic(request, name): """Find all topics created by an user. Returns: HttpResponse """ u = get_object_or_404(User, username=name) topics = Topic.objects.all().filter(author=u)\ .order_by('-pubdate') # Paginator paginator = Paginator(topics, settings.TOPICS_PER_PAGE) page = request.GET.get('page') try: shown_topics = paginator.page(page) page = int(page) except PageNotAnInteger: shown_topics = paginator.page(1) page = 1 except EmptyPage: shown_topics = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template('forum/find_topic.html', { 'topics': shown_topics, 'usr': u, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def new_image(request, gal_pk): """Add a new image to a gallery. Returns: HttpResponse """ gal = get_object_or_404(Gallery, pk=gal_pk) if request.method == 'POST': form = ImageForm(request.POST, request.FILES) if form.is_valid() \ and request.FILES['physical'].size < settings.IMAGE_MAX_SIZE: img = Image() img.physical = request.FILES['physical'] img.gallery = gal img.title = request.POST['title'] img.slug = slugify(request.FILES['physical']) img.legend = request.POST['legend'] img.pubdate = datetime.now() img.save() # Redirect to the document list after POST return redirect(gal.get_absolute_url()) else: form = ImageForm() # A empty, unbound form return render_template('gallery/new_image.html', { 'form': form, 'gallery': gal })
def help_markdown(request): """Display a page with a markdown helper. Returns: HttpResponse """ return render_template('pages/help_markdown.html')
def index(request): """Display list of available static pages. Returns: HttpResponse """ return render_template('pages/index.html')
def about(request): """Display many informations about the website. Returns: HttpResponse """ return render_template('pages/about.html')
def by_category(request, name): """Display all tutorials belonging to a specific category. Returns: HttpResponse """ # Deduce category to display based on its name if name == 'tous': category = TutorialCategory(title=u'Tous les tutoriels', slug=u'tous') tutorials = Tutorial.objects \ .filter(is_beta=False, is_visible=True) \ .order_by('-pubdate') elif name == 'autres': category = TutorialCategory(title=u'Non classés', slug=u'autres') tutorials = Tutorial.objects \ .filter(is_beta=False, is_visible=True) \ .filter(category=None) \ .order_by('-pubdate') elif name == 'beta': # Only visible for members if not request.user.is_authenticated(): raise PermissionDenied category = TutorialCategory(title=u'Bêta', slug=u'beta') tutorials = Tutorial.objects \ .filter(is_beta=True) \ .order_by('-pubdate') else: category = get_object_or_404(TutorialCategory, slug=name) tutorials = Tutorial.objects \ .filter(category=category, is_beta=False, is_visible=True) \ .order_by('-pubdate') paginator = Paginator(tutorials, settings.TUTORIALS_PER_PAGE) try: page_nbr = int(request.GET['page']) except KeyError: page_nbr = 1 try: tutorials = paginator.page(page_nbr) except PageNotAnInteger: tutorials = paginator.page(1) except EmptyPage: raise Http404 categories = TutorialCategory.objects.all() return render_template('tutorial/by_category.html', { 'category': category, 'categories': categories, 'tutorials': tutorials, 'nb': page_nbr, 'pages': paginator_range(page_nbr, paginator.num_pages), })
def settings_profile(request): """Set current user's profile settings. Returns: HttpResponse """ # Extra information about the current user profile = Profile.objects.get(user=request.user) if request.method == 'POST': form = ProfileForm(request.user, request.POST) if form.is_valid(): profile.biography = form.data['biography'] profile.site = form.data['site'] profile.show_email = 'show_email' in form.data profile.avatar_url = form.data['avatar_url'] profile.mail_on_private_message = \ 'mail_on_private_message' in form.data profile.save() messages.success( request, u'Le profil a correctement été mis à jour.') return redirect('/membres/parametres/profil') else: return render_template('member/settings_profile.html', { 'form': form }) else: form = ProfileForm(request.user, initial={ 'biography': profile.biography, 'site': profile.site, 'avatar_url': profile.avatar_url, 'show_email': profile.show_email, 'mail_on_private_message': profile.mail_on_private_message} ) return render_template('member/settings_profile.html', { 'form': form })
def settings_profile(request): """Set current user's profile settings. Returns: HttpResponse """ # Extra information about the current user profile = Profile.objects.get(user=request.user) if request.method == "POST": form = ProfileForm(request.user, request.POST) if form.is_valid(): profile.biography = form.data["biography"] profile.site = form.data["site"] profile.show_email = "show_email" in form.data profile.avatar_url = form.data["avatar_url"] profile.mail_on_private_message = "mail_on_private_message" in form.data profile.save() messages.success(request, u"Le profil a correctement été mis à jour.") return redirect("/membres/parametres/profil") else: return render_template("member/settings_profile.html", {"form": form}) else: form = ProfileForm( request.user, initial={ "biography": profile.biography, "site": profile.site, "avatar_url": profile.avatar_url, "show_email": profile.show_email, "mail_on_private_message": profile.mail_on_private_message, }, ) return render_template("member/settings_profile.html", {"form": form})
def gallery_list(request): """Display the gallery list with all their images. Returns: HttpResponse """ galleries = UserGallery.objects.all().filter(user=request.user) return render_template('gallery/gallery_list.html', {'galleries': galleries})
def details(request, user_name): """Display details about a profile. Returns: HttpResponse """ usr = get_object_or_404(User, username=user_name) profile = get_object_or_404(Profile, user=usr) return render_template("member/profile.html", {"usr": usr, "profile": profile})
def index(request): """Display the category list with all their forums. Returns: HttpResponse """ categories = Category.objects.all() \ .order_by('position') return render_template('forum/index.html', {'categories': categories})
def add_chapter(request): """Add a new chapter to a part. Returns: HttpResponse """ try: part_pk = request.GET['partie'] except KeyError: raise Http404 part = get_object_or_404(Part, pk=part_pk) # TODO: do not show error about empty title on new form # Make sure the user is allowed to do that if request.user not in part.tutorial.authors.all(): raise PermissionDenied if request.method == 'POST': form = AddChapterForm(request.POST, request.FILES) if form.is_valid(): data = form.data chapter = Chapter() chapter.title = data['title'] chapter.introduction = data['introduction'] chapter.conclusion = data['conclusion'] chapter.part = part chapter.position_in_part = part.get_chapters().count() + 1 chapter.update_position_in_tutorial() if 'image' in request.FILES: chapter.image = request.FILES['image'] chapter.save() tutorial = chapter.get_tutorial() tutorial.update = datetime.now() tutorial.save() if 'submit_continue' in request.POST: form = AddChapterForm({'part': part.pk}) messages.success(request, u'Chapitre « {0} » ajouté avec succès.' .format(chapter.title)) else: return redirect(chapter.get_absolute_url()) else: form = AddChapterForm({'part': part.pk}) return render_template('tutorial/new_chapter.html', { 'part': part, 'form': form })
def home(request): """Display the home page with last articles, tutorials and topics added. Returns: HttpResponse """ return render_template('home.html', { 'last_articles': get_last_articles(), 'last_tutorials': get_last_tutorials(), 'last_topics': get_last_topics(), })
def import_tutorial(request): error = None if request.method == 'POST': form = ImportTutorialForm(request.POST, request.FILES) if form.is_valid(): data = form.data source = request.FILES['markdown'] try: # Consider input file as UTF-8 text with BOM (or not) content = source.read().decode('utf-8-sig') ti = loader.TutorialImporter(request.user, data['size']) ti.from_text(content) ti.run() except UnicodeError as e: error = u'Erreur unicode de l’octet {} à {} : {}.'.format( e.start, e.end, e.reason ) except loader.NegativeTitleLevelError as e: error = u'Descente de niveau de titre ({}) en dessous du ' \ u'niveau principal ({}), ligne {}.'.format( e.level, e.previous_level, e.line ) except loader.InvalidLevelIncreaseError as e: error = u'Descente de niveau de titre trop rapide ' \ u'(de {} à {}), ligne {}.'.format( e.previous_level, e.level, e.line ) except loader.EmptyTitleError as e: error = u'Titre vide, ligne {}.'.format( e.line ) except loader.NoTitleFoundError: error = u'Aucun titre n’a été trouvé.' if not error: return redirect(ti.tutorial.get_absolute_url()) else: form = ImportTutorialForm() return render_template('tutorial/import_tutorial.html', { 'form': form, 'error': error })
def home(request): """Display the home page with last articles, tutorials and topics added. Returns: HttpResponse """ return render_template( 'home.html', { 'last_articles': get_last_articles(), 'last_tutorials': get_last_tutorials(), 'last_topics': get_last_topics(), })
def index(request): """Display the category list with all their forums. Returns: HttpResponse """ categories = Category.objects.all() \ .order_by('position') return render_template('forum/index.html', { 'categories': categories })
def details(request, user_name): """Display details about a profile. Returns: HttpResponse """ usr = get_object_or_404(User, username=user_name) profile = get_object_or_404(Profile, user=usr) return render_template('member/profile.html', { 'usr': usr, 'profile': profile })
def cat_details(request, cat_slug): """Display the forums belonging to the given category. Returns: HttpResponse """ category = get_object_or_404(Category, slug=cat_slug) forums = Forum.objects.all().filter(category__pk=category.pk) return render_template('forum/cat_details.html', { 'category': category, 'forums': forums })