Skip to content

kleenex1/cheers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

204 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

20팀 Cheers(임수경, 변규탁)

작업기간

2022-11-16 ~ 2022-11-21

배포 페이지

http://kdt.pythonanywhere.com/

기술 스택

img img img img img img

작업한 부분

작업내역

배운 내용

Allauth accounts url

urlpatterns = [

    path("signup/", views.signup, name="account_signup"),

    path("login/", views.login, name="account_login"),

    path("logout/", views.logout, name="account_logout"),

    path(

        "password/change/",

        views.password_change,

        name="account_change_password",

    ),

    path("password/set/", views.password_set, name="account_set_password"),

    path("inactive/", views.account_inactive, name="account_inactive"),

    # E-mail

    path("email/", views.email, name="account_email"),

    path(

        "confirm-email/",

        views.email_verification_sent,

        name="account_email_verification_sent",

    ),

    re_path(

        r"^confirm-email/(?P<key>[-:\w]+)/$",

        views.confirm_email,

        name="account_confirm_email",

    ),

    # password reset

    path("password/reset/", views.password_reset, name="account_reset_password"),

    path(

        "password/reset/done/",

        views.password_reset_done,

        name="account_reset_password_done",

    ),

    re_path(

        r"^password/reset/key/(?P<uidb36>[0-9A-Za-z]+)-(?P<key>.+)/$",

        views.password_reset_from_key,

        name="account_reset_password_from_key",

    ),

    path(

        "password/reset/key/done/",

        views.password_reset_from_key_done,

        name="account_reset_password_from_key_done",

    ),

]

Mixin 접근 제어

1

  • (추후)
  • 접근 제어 코드 리팩터링하기(views.py 에서 중복되는 mixin을 따로 모듈로 생성하여 활용)
  1. 로그인만 필요 : LoginRequiredmMixin
  2. 로그인 + 이메일 인증 (레시피 작성, 댓글 작성, 좋아요, 팔로우)
  3. 로그인 + 오브젝트 (레시피 수정, 레시피 삭제, 댓글 수정 삭제)

Middleware

2

# settings.py 
MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
    "cheers.middleware.ProfileSetupMiddleware",
]

장고공식문서 SimpleMiddleware를 참조

from django.urls import reverse
from django.shortcuts import redirect

class ProfileSetupMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

    def __call__(self, request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.
        if (
            request.user.is_authenticated and
            not request.user.nickname and
            request.path_info != reverse('profile-setting')
        ):
            return redirect("profile-setting")

        response = self.get_response(request)
        # Code to be executed for each request/response after
        # the view is called.
        return response

ModelAdmin

  • Django는 관리자 페이지를 제공해주기 때문에 편리한만큼 조금의 추가 설정만 해주면 한데 모아 각 모델별 오브젝트들을 관리할 수 있다.
class UserInline(admin.StackedInline):
    model = User.following.through
    fk_name = 'to_user'
    verbose_name = 'Follower'
    verbose_name_plural = 'Followers'

class CommentInline(admin.StackedInline):
    model = Comment

# GenericForeignKey를 통해 관계를 맺고 있는것은 StackedInline을 못쓴다.
# class LikeInline(admin.StackedInline):
#     model = Like

class LikeInline(GenericStackedInline):
    model = Like

class RecipeAdmin(admin.ModelAdmin):
    inlines = (
        CommentInline,
        LikeInline,
    )

class CommentAdmin(admin.ModelAdmin):
    inlines = (
        LikeInline,
    )

class ProductAdmin(admin.ModelAdmin):
    inlines = (
        LikeInline,
    )

admin.site.register(User, UserAdmin)
admin.site.register(Recipe, RecipeAdmin)
admin.site.register(Comment, CommentAdmin)
admin.site.register(Like)
admin.site.register(Product,ProductAdmin)

# User모델의 추가 필드는 admin 페이지에 따로 나오지 않기 때문에 설정을 해줘야한다.
UserAdmin.fieldsets += (("Custom fields", {"fields": ("nickname", "profile_pic", "introduce", "following")}),)
UserAdmin.inlines = (UserInline,)

Django 요청/응답

3

참고사이트

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors