配置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 %}
~~~