Пример #1
0
def edit_profile(request):
    """
    Edit the profile fields
    """
    profile = request.user.profile
    form = forms.ProfileForm(instance=profile)

    if request.method == 'POST':
        if settings.SYSTEM_MAINTENANCE_NO_UPLOAD:
            # Allow submitting the form, but do not allow the photo to
            # be modified.
            if 'delete_photo' in request.POST or request.FILES:
                raise ServiceUnavailable()

        if 'edit_profile' in request.POST:
            # Update the profile and return to the same page. Place a message
            # at the top of the page: 'your profile has been updated'
            form = forms.ProfileForm(data=request.POST,
                                     files=request.FILES,
                                     instance=profile)
            if form.is_valid():
                form.save()
                messages.success(request, 'Your profile has been updated.')
        elif 'delete_photo' in request.POST:
            profile.delete_photo()
            messages.success(request, 'Your profile photo has been deleted.')

        if not form.errors:
            form = forms.ProfileForm(instance=profile)

    return render(request, 'user/edit_profile.html', {'form': form})
Пример #2
0
def profile_other(request, id):
    user = User.objects.filter(id=id).first()
    if user and request.user.type in [
            UserType.PARTICIPANT.value,
            UserType.ORGANISER.value,
            UserType.VOLUNTEER.value,
            UserType.MENTOR.value,
            UserType.SPONSOR.value,
            UserType.RECRUITER.value,
    ]:
        extra_info = (request.user.type in [
            UserType.ORGANISER.value,
            UserType.VOLUNTEER.value,
            UserType.MENTOR.value,
        ] or user.picture_public_participants
                      and request.user.type == UserType.PARTICIPANT.value
                      or user.picture_public_sponsors_and_recruiters
                      and request.user.type
                      in [UserType.SPONSOR.value, UserType.RECRUITER.value])
        user_data = user.get_dict()
        form = forms.ProfileForm(user_data)
        return render(
            request,
            "profile.html",
            {
                "form": form,
                "user": user_data,
                "picture": user.picture.crop["500x500"],
                "other": True,
                "extra_info": extra_info,
                "type_str": UserType(user.type).name.capitalize(),
                "underage": user.is_underage,
            },
        )
    return HttpResponseNotFound()
Пример #3
0
def edit_profile(request):
    """修改个人资料、及交友资料"""
    # 定义两个form表单的实例对象
    user_form = forms.UserForm(request.POST)
    profile_form = forms.ProfileForm(request.POST)

    # 检查user_form和profile_form
    if not user_form.is_valid() or not profile_form.is_valid():
        # 返回错误信息.
        form_errors = {}
        form_errors.update(user_form.errors)
        form_errors.update(profile_form.errors)
        return render_json(code=errors.PROFILE_ERROR, data=form_errors)

    # 如果form表单提交的数据没问题
    # 更新user和profile
    uid = request.uid
    # user_form.cleaned_data本身就是一个字典.可以使用**进行解包
    User.objects.filter(id=uid).update(**user_form.cleaned_data)

    # 更新或者创建profile
    # 注意: profile和user是一对一的关系, 创建profile的时候,为了满足一对一的关系.
    #  必须保证创建出来的profile的id和这个profile对应的user的id是一致.
    print(type(profile_form.cleaned_data))
    print(profile_form.cleaned_data)
    profile, _ = Profile.objects.update_or_create(
        id=uid, defaults=profile_form.cleaned_data)
    # 更新缓存的数据
    profile_key = keys.PROFILE % uid
    user_key = keys.OBJECT % (User.__name__, uid)
    cache.delete_many(profile_key, user_key)
    return render_json()
Пример #4
0
def modify_profile(request):
    '''修改个人资料、及交友资料'''
    # 定义两个 Form 表单
    user_form = forms.UserForm(request.POST)
    profile_form = forms.ProfileForm(request.POST)

    # 检查 user_form 和 profile_form
    if not user_form.is_valid() or not profile_form.is_valid():
        errors = {}
        errors.update(user_form.errors)
        errors.update(profile_form.errors)
        raise err.ProfileErr(errors)

    # 更新 user
    # update user set nickname='xxx', gender='male' where id=1;
    User.objects.filter(id=request.uid).update(**user_form.cleaned_data)

    # 更新或创建 profile
    Profile.objects.update_or_create(id=request.uid,
                                     defaults=profile_form.cleaned_data)

    # 更新缓存
    key = keys.USER_RPROFILE_K % request.uid
    rds.delete(key)

    return render_json()
Пример #5
0
 def get_context_data(self, *args, **kwargs):
     context = super(UserProfile, self).get_context_data(**kwargs)
     form = forms.ProfileForm(initial={
         'name': self.request.user.name,
         'email': self.request.user.email,
         'type': self.request.user.type if self.request.user.can_change_type() else 'H',
         'non_change_type': self.request.user.get_type_display(),
     }, type_active=self.request.user.can_change_type())
     context.update({'form': form})
     return context
Пример #6
0
 def post(self, request, *args, **kwargs):
     form = forms.ProfileForm(request.POST, type_active=request.user.can_change_type())
     if form.is_valid():
         name = form.cleaned_data['name']
         request.user.name = name
         if request.user.can_change_type():
             type = form.cleaned_data['type']
             request.user.type = type
         request.user.save()
         messages.success(request, "Profile saved successfully")
         c = self.get_context_data()
     else:
         c = self.get_context_data()
         c.update({'form': form})
     return render(request, self.template_name, c)
Пример #7
0
def edit_profile(request):
    """修改个人资料及交友资料"""
    # 定义两个form表单的实例对象
    user_form = forms.UserFrom(request.POST)
    profile_form = forms.ProfileForm(request.POST)
    # 检查user_form和profile_from
    if not user_form.is_valid() or not profile_form.is_valid():
        form_errors = {}
        form_errors.update(user_form.errors)
        form_errors.update(profile_form.errors)
        return render_json(code=errors.PROFILE_ERROR, data=form_errors)
    uid = request.uid
    # user_form.cleaned_data本身就是一个字典,可以使用**进行解包
    User.objects.filter(id=uid).update(**user_form.cleaned_data)
    # 更新或者创建profile
    # 注意profile和user是一对一的关系,创建的profile的时候为了满足一对一的关系必须保证创建出来的profile的id和对应的user的id是一致的
    Profile.objects.update_or_create(id=uid,
                                     defaults=profile_form.cleaned_data)
    return render_json()
Пример #8
0
def modify_prodile(request):
    '''修改个人及交友资料'''
    # 定义两个Form 表单
    user_form = forms.UserForm(request.POST)
    profile_form = forms.ProfileForm(request.POST)

    # 检查 user_form 和profile_form
    if not user_form.is_valid() or not profile_form.is_valid():
        errors = {}
        errors.update(user_form.errors)
        errors.update(profile_form.errors)
        raise error.ProfileErr(errors)

    # 更新user
    User.objects.filter(id=request.uid).update(**user_form.cleaned_data)

    # 更新或创建profile
    # 如果用户没有调用查看个人交友资料接口,数据库里就没有对应的profile数据,防止直接调用修改个人资料接口
    Profile.objects.update_or_create(id=request.uid,
                                     defaults=profile_form.cleaned_data)
Пример #9
0
def modify_profile(request):
    '''修改个人资料及交友资料'''
    # 定义两个Form表单
    user_form = forms.UserForm(request.POST)
    profile_form = forms.ProfileForm(request.POST)
    # 检查user_form 和 profile_form
    if not user_form.is_valid() or not profile_form.is_valid():
        errors = {}
        errors.update(user_form.errors)
        errors.update(profile_form.errors)

        raise err.ProfileErr(errors)

    # 更新user数据
    User.objects.filter(id=request.uid).update(**user_form.cleaned_data)
    # 更新profile数据
    Profile.objects.update_or_create(id=request.uid, defaults=profile_form.cleaned_data)
    key = keys.USER_PROFILE_K % request.uid
    rds.delete(key)
    return render_json()
Пример #10
0
def profile(request):
    if request.method == "POST":
        form = forms.ProfileForm(request.POST, request.FILES)
        if form.is_valid():
            try:
                name = form.cleaned_data["name"]
                if request.user.name != name:
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="name",
                        value_previous=request.user.name,
                        value_current=name,
                    ).save()
                    request.user.name = name
                surname = form.cleaned_data["surname"]
                if request.user.surname != surname:
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="surname",
                        value_previous=request.user.surname,
                        value_current=surname,
                    ).save()
                    request.user.surname = surname
                email = form.cleaned_data["email"]
                if request.user.email != email:
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="email",
                        value_previous=request.user.email,
                        value_current=email,
                    ).save()
                    request.user.email_verified = False
                    request.user.email = email
                    send_verify(request.user)
                    messages.success(
                        request,
                        "The email has been changed, you need to verify it again!",
                    )
                if "picture" in request.FILES:
                    picture = request.FILES["picture"]
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="picture",
                        value_previous=request.user.picture,
                        value_current=picture,
                    ).save()
                    request.user.picture.delete_sized_images()
                    request.user.picture = picture
                picture_public_participants = form.cleaned_data[
                    "picture_public_participants"]
                if (request.user.picture_public_participants !=
                        picture_public_participants):
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="picture_public_participants",
                        value_previous=request.user.
                        picture_public_participants,
                        value_current=picture_public_participants,
                    ).save()
                    request.user.picture_public_participants = (
                        picture_public_participants)
                picture_public_sponsors_and_recruiters = form.cleaned_data[
                    "picture_public_sponsors_and_recruiters"]
                if (request.user.picture_public_sponsors_and_recruiters !=
                        picture_public_sponsors_and_recruiters):
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="picture_public_sponsors_and_recruiters",
                        value_previous=request.user.
                        picture_public_sponsors_and_recruiters,
                        value_current=picture_public_sponsors_and_recruiters,
                    ).save()
                    request.user.picture_public_sponsors_and_recruiters = (
                        picture_public_sponsors_and_recruiters)
                phone = form.cleaned_data["phone"]
                if request.user.phone != phone:
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="phone",
                        value_previous=request.user.phone,
                        value_current=phone,
                    ).save()
                    request.user.phone = phone
                    city = form.cleaned_data["city"]
                    if request.user.city != city:
                        UserChange(
                            user=request.user,
                            changed_by=request.user,
                            field="city",
                            value_previous=request.user.city,
                            value_current=city,
                        ).save()
                        request.user.city = city
                city = form.cleaned_data["city"]
                if request.user.city != city:
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="city",
                        value_previous=request.user.city,
                        value_current=city,
                    ).save()
                    request.user.city = city
                country = form.cleaned_data["country"]
                if request.user.country != country:
                    UserChange(
                        user=request.user,
                        changed_by=request.user,
                        field="country",
                        value_previous=request.user.country,
                        value_current=country,
                    ).save()
                    request.user.country = country
                request.user.save()
                messages.success(request, "Profile updated successfully!")
            except IntegrityError:
                messages.error(request,
                               "The email you entered is already in use!")
        else:
            messages.error(
                request,
                "The data you introduced is invalid, please fill in all the fields!",
            )

    user_data = request.user.get_dict()
    form = forms.ProfileForm(user_data)
    if request.user.is_participant:
        user_data["applications"] = get_applications_by_user(request.user.id)
    return render(
        request,
        "profile.html",
        {
            "form": form,
            "user": user_data,
            "picture": request.user.picture.crop["500x500"],
        },
    )