ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
配置models.py文件 ~~~ # _*_ coding:utf-8 * _*_ from __future__ import unicode_literals from datetime import datetime from django.db import models from django.contrib.auth.models import User#引入自带User # # # Create your models here. #新增用户注册字段 class UserProfile(models.Model): #OneToOneField通过user字段与User类关联,一对一 user = models.OneToOneField(User, unique=True, verbose_name=u"帐号") birth = models.DateField(blank=True, null=True, verbose_name=u"生日") phone = models.CharField(max_length=11, null=True, verbose_name=u"手机号") class Meta: verbose_name = u"用户信息" verbose_name_plural = verbose_name def __str__(self): return 'user{}'.format(self.user.username) #新增用户信息 class UserInfo(models.Model): user = models.OneToOneField(User, unique=True) shool = models.CharField(max_length=100, blank=True) profession = models.CharField(max_length=100, blank=True) address = models.CharField(max_length=100, blank=True) aboutme = models.TextField(blank=True) def __str__(self): return "user:{}".format(self.user.username) ~~~ 配置views.py文件 ~~~ # _*_ coding:utf-8 * _*_ from django.shortcuts import render, redirect#redirect跳转 #引入系统模块 from django.http import HttpResponse #引入login内置用户管理 from django.contrib.auth import authenticate, login #引入forms类 from .forms import LoginFrom, RegistrationFrom, UserProfileForm #UserProfileForm新增用户字段 #新增用户信息,required引入装饰器,判断用户登录 from django.contrib.auth.decorators import login_required from .models import UserProfile, UserInfo from django.contrib.auth.models import User # Create your views here. #登录函数 def user_login(request): #method是HttpRequest对象的一个常用属性,可返回POST、GET if request.method == "POST": login_form = LoginFrom(request.POST) #is_valid验证传入数据是否合法性 if login_form.is_valid(): #cleaned_data引用一个字典类型数据 cd = login_form.cleaned_data #authenticate检验数据库帐号密码是否正确 user = authenticate(username=cd['username'], password=cd['password']) #login引入的login()函数,已语句user实例对象作为参数,实现用户登录,登录后调用session if user: #判断正确返回HttpResponse login(request, user) #redirect跳转 return redirect("blog:blog_title") #return HttpResponse("Wellcome YOU") else: return HttpResponse("Sorry") if request.method == "GET": login_form = LoginFrom() return render(request, "account/login.html", {"form":login_form}) #注册函数,原始版 # def register(request): # if request.method == "POST": # #用这些数据实例化一个用户注册表单 # user_form = RegistrationFrom(request.POST) # # 验证数据的合法性 # if user_form.is_valid(): # #.save(commit=False)数据不保存数据库,仅生成数据对象, # new_user = user_form.save(commit=False) # #.cleaned_data['password']校验密码然后保存数据库 # new_user.set_password(user_form.cleaned_data['password']) # #保存数据库 # new_user.save() # #redirect跳转 # return redirect("blog:blog_title") # # return HttpResponse("successfully") # else: # return HttpResponse("sorry,your can not register") # else: # # 请求不是 POST,构造一个空表单 # user_form = RegistrationFrom() # # 渲染模板 # # 如果不是 POST 请求,则渲染的是一个空的表单 # # 如果用户通过表单提交数据,但是数据验证不合法,则渲染的是一个带有错误信息的表单 # return render(request, "account/register.html", {"form": user_form}) #注册函数,新增字段 def register(request): if request.method == "POST": user_form = RegistrationFrom(request.POST) #新增字段 userprofile_form = UserProfileForm(request.POST) #新增*userprofile_form.is_valid()验证数据 if user_form.is_valid()*userprofile_form.is_valid(): new_user = user_form.save(commit=False) new_user.set_password(user_form.cleaned_data['password']) new_user.save() #新增字段 new_profile = userprofile_form.save(commit=False) new_profile.user = new_user new_profile.save() UserInfo.objects.create(user=new_user)##新增个人信息 return redirect("blog:blog_title") # return HttpResponse("successfully") else: return HttpResponse("sorry,your can not register") else: user_form = RegistrationFrom() return render(request, "account/register.html", {"form": user_form, "profile": UserProfileForm}) #新增个人信息 @login_required(login_url='account:user_login') def myself(request): user = User.objects.get(username=request.user.username) userprofile = UserProfile.objects.get(user=user) userinfo = UserInfo.objects.get(user=user) return render(request, "account/myself.html", {"user": user, "userinfo": userinfo, "userprofile": userprofile}) ~~~ 配置urls.py文件 ~~~ # _*_ coding:utf-8 _*_ __author__ = 'canmeng' __date__ = '2018/1/7 19:16' from django.conf.urls import url #引入app项目 view from .import views from django.conf import settings #引入系统自动登录views from django.contrib.auth import views as auth_views urlpatterns = [ url(r'^login/$', views.user_login, name="user_login"),#自建系统登录 #url(r'^login/$', auth_views.login, name="user_login"),#引入系统自带views登录 # url(r'^logout/$', auth_views.logout, name="user_logout"),#引入系统自带views退出 #用户退出,定义连接"template_name": "account/logout.html" url(r'^logout/$', auth_views.logout, {"template_name": "account/logout.html"}, name="user_logout"),#退出登录 url(r'^register/$', views.register, name="register"),#注册 url(r'^myself/$', views.myself, name="myself"),#注册 ] ~~~ myself.html样板 ~~~ {% extends "base.html" %} {% block title %}用户信息{% endblock %} {% block content %} <div> <div>用户名</div> <div>{{ user.username }}</div> </div> <div> <div>邮箱</div> <div>{{ user.email }}</div> </div> <div> <div>生日</div> <div>{{ userprofile.birth }}</div> </div> <div> <div>电话</div> <div>{{ userprofile.phone }}</div> </div> <div> <div>毕业学校</div> <div>{{ userinfo.shool }}</div> </div> <div> <div>职业</div> <div>{{ userinfo.profession }}</div> </div> <div> <div>地址</div> <div>{{ userinfo.address }}</div> </div> <div> <div>个人介绍</div> <div>{{ userinfo.aboutme }}</div> </div> {% endblock %} ~~~