You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
4.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from django.contrib.auth.hashers import check_password
from django.shortcuts import render, redirect, reverse
from django.contrib.auth import login, logout, authenticate
from django.http import HttpResponse
from django.urls import reverse_lazy
from django.views.generic import UpdateView
from .forms import *
from .models import *
# Create your views here.
def user_register(request):
if request.method == "GET":
return render(request, "user/register.html")
if request.method == "POST":
password = request.POST["password"]
password_again = request.POST["password_again"]
if password != password_again:
return render(request, "user/register.html", {"password_error": "两次输入的密码不一致"})
form = UserRegisterModelForm(request.POST)
if form.is_valid():
form.save()
return redirect(reverse("user:user_login"))
else:
error = form.errors
return render(request, "user/register.html", locals())
def user_login(request):
if request.method == "GET":
return render(request, "user/login.html")
if request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
userid = form.cleaned_data.get("userid")
password = form.cleaned_data.get("password")
user = authenticate(request, userid=userid, password=password)
if user:
login(request, user)
# 这里不能使用render要redirect
return redirect("article:index")
else:
return render(request, "user/login.html", {"error": "用户名或密码错误"})
else:
error = form.errors
return render(request, "user/login.html", locals())
def user_logout(request):
logout(request)
return redirect(reverse("user:user_login"))
def user_password(request):
if request.user.is_authenticated:
if request.method == "GET":
form = PasswordForm()
return render(request, "user/user_password.html", locals())
elif request.method == "POST":
user = request.user
form = PasswordForm(request.POST)
if form.is_valid():
origin_password = form.cleaned_data.get("origin_password")
new_password = form.cleaned_data.get("new_password")
is_true_password = check_password(origin_password, user.password)
if not is_true_password:
return render(request, "user/user_password.html", {"password_error": "原密码不正确!", "form": form})
user.set_password(new_password)
user.save()
return redirect("user:user_login")
else:
errors = form.errors
return render(request, "user/user_password.html", locals())
else:
return redirect("user:login")
def user_profile_view(request):
user = request.user
try:
print("hello")
profile = user.profile_user
print(profile)
return render(request, "user/profile.html", locals())
except Exception:
profile = None
return render(request, "user/profile.html", locals())
def user_profile_create(request):
if request.method == "GET":
form = ProfileModelForm()
return render(request, "user/profile_create.html", locals())
elif request.method == "POST":
form = ProfileModelForm(request.POST, request.FILES)
if form.is_valid():
profile = form.save(commit=False)
profile.user = request.user
profile.save()
return redirect("user:user_profile_view")
else:
errors = form.errors
return render(request, "user/profile_create.html", locals())
class UserProfileUpdate(UpdateView):
template_name = "user/profile_update.html"
form_class = ProfileModelForm
success_url = reverse_lazy("user:user_profile_view")
queryset = UserProfile.objects.all()