ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • django create-message by FBV
    Project using python/Cloning Airbnb 2021. 4. 23. 17:19

    url 설정

    config/urls.py

    urlpatterns = [
        path("conversations/", include("conversations.urls", namespace="conversations")),
    ]

    conversations/urls.py

    from django.urls import path
    from . import views
    
    
    app_name = "conversations"
    
    urlpatterns = [
        path(
            "conversation-list/",
            views.conversationList,
            name="conversation-list",
        ),
    ]
    

    templates

    pages/conversations/conversation_detail.html

    {% extends 'base.html' %}
    
    {% load remainder_op %}
    
    {% block page_title %}
        Conversation-{{room}}
    {% endblock page_title %}
    
    {% block content %}
        <div class="flex flex-col items-center justify-items-center">
            <main class="border border-gray-500 p-6 rounded-lg w-1/2">
                <div class="flex items-center justify-center mb-10">
                    {% include 'mixins/conversation_avatars.html' with conversation=conversation %}
                </div>
                <div class="flex flex-col">
                    {% for message in conversation.messages.all %}
                        <div class=" {% if message.user.pk == user.pk %}self-end text-right{% endif %}">
                            <div class="mb-2 text-sm font-medium text-gray-600">{{message.user.first_name}}</div>
                            <div class="text-base mb-4 font-medium p-3 rounded-lg max-w-xs
                            {% if message.user.pk == user.pk %}
                                bg-green-500
                                text-white
                            {% else %}
                                bg-gray-300
                            {% endif %}
                            ">
                            {{message.message}}
                            </div>
                        </div>
                        {% endfor %}
                    </div>
                    <div class="flex justify-center">
                    <form action="{% url 'conversations:create-message' conversation.pk %}" class="flex flex-col mt-10 rounded-2xl shadow-lg h-10 w-1/3" method="POST">
                        {% csrf_token %}
                        <input class="text-center outline-none" name="message" placeholder="Write a Message" required />
                    </form>
                </div>
            </main>
        </div>
    {% endblock content %}

    FBV(Function Based View)

    conversations/views.py

    # conversations/views.py
    
    from django.shortcuts import redirect, reverse
    from django.contrib import messages
    
    from conversations import models as conversation_models
    
    
    def createMessage(request, conversation_pk):
        message = request.POST.get("message")
        try:
            conversation = conversation_models.Conversation.objects.get(pk=conversation_pk)
            pk = []
            for participant in conversation.participants.all():
                pk.append(participant.pk)
            if message is not None:
                conversation_models.Message.objects.create(
                    message=message, user=request.user, conversation=conversation
                )
        except conversation_models.Conversation.DoesNotExist:
            messages.error(request, "Conversation does not exist")
        return redirect(
            reverse("conversations:conversation-detail", kwargs={"pk": conversation.pk})
        )
    

    참고 자료

    • 노마드 코더의 Airbnb 클론 강의

    소스 코드

    github.com/zpskek/airbnb-clone-v3/commit/0ea875fa3a2e145675aeaf4a265413752cae4fee

    댓글

Designed by Tistory.