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})
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()
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()
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()
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
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)
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()
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)
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()
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"], }, )