赞
踩
这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题
于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。
微信小程序搜索:Python面试宝典
或可关注原创个人博客:https://lienze.tech
也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习
from django.contrib.auth.models import User
class User(AbstractUser):
username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)
# 必选。少于等于30个字符。 用户名可以包含字母、数字、_、@、+、.和-字符
first_name = models.CharField(_('first name'), max_length=30, blank=True)
# 可选。 少于等于30个字符
last_name = models.CharField(_('last name'), max_length=150, blank=True)
# 可选。少于30个字符
email = models.EmailField(_('email address'), blank=True)
# 可选。邮箱地址
is_staff = models.BooleanField(
_('staff status'),
default=False,
help_text=_('Designates whether the user can log into this admin site.'),
)
# 布尔值。指示用户是否可以访问Admin站点
is_active = models.BooleanField(
_('active'),
default=True,
help_text=_(
'Designates whether this user should be treated as active. '
'Unselect this instead of deleting accounts.'
),
)
# 布尔值。用户的账号是否激活。常使用这个标志为False来代替删除账号
date_joined = models.DateTimeField(_('date joined'), default=timezone.now
# 账户创建的时间。当账号创建时,默认设置为当前的datetime
password = models.CharField(_('password'), max_length=128)
# 必选。 密码的哈希及元数据。(Django不保存原始密码)。原始密码可以无限长而且可以包含任意字符
last_login = models.DateTimeField(_('last login'), blank=True, null=True)
# 用户最后一次登录的时间。如果这个用户没有登录过,这个字段将会是null,默认设置为的当前的datetime
is_superuser = models.BooleanField(
_('superuser status'),
default=False,
help_text=_(
'Designates that this user has all permissions without '
'explicitly assigning them.'
),
)
# 布尔值。指定这个用户拥有所有的权限而不需要给他们分配明确的权限
get_username()
获取到当前的用户的用户名属性
is_authenticated()
检查用户是否已通过认证
is_anonymous()
检查用户是否未通过认证
set_password(password)
设置保存用户的密码,并且会负责密码的哈希加密工作
通常修改密码之后还需要调用
save()
方法进行数据更新
create_user(username, email=None, password=None, **extra_fields)
django
的用户创建需要使用User
表管理器中的create_user
函数进行该函数可以创建并保存一个用户
create_superuser(username, email, password, **extra_fields)
与上一个创建用户函数功能相同,但是会额外设置用户的
is_staff
及is_superuser
属性为True
创建一个
admin
后台超级用户
from django.contrib.auth import authenticate
authenticate(username,password)
# 验证是否为合法用户,如果用户存在合法则返回一个user对象
from django.contrib.auth import logout,login
logout(request)
# 清除当前浏览器下用户session
login(request,user)
# 登录并保存当前用户session,参数user必须为使用authenticate验证过后的User对象
#forms.py
from django import forms
from django.contrib.auth.models import User
import re
class LoginForm(forms.Form):
username = forms.CharField(label="用户名",required=True,)
password = forms.CharField(
widget=forms.PasswordInput(),
label='密码',
required=True,
)
def clean_username(self):
username = self.cleaned_data.get("username").strip()
try:
User.objects.get(username=username)
except User.DoesNotExist:
raise forms.ValidationError("用户名 %s 不存在" % username)
else:
return username
<!DOCTYPE html>
<html>
<head>
<title>登录</title>
</head>
<body>
<form action='/login/' method="POST">
{% csrf_token %}
{{ errors }}
{% for field in form %}
<label>
{% if field.errors %}
<ul>
{% for error in field.errors%}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</label>
<p>{{ field.label }}: {{ field }}</p>
{% endfor %}
<input type="submit" value="登录">
</form>
</body>
</html>
#views.py
from django.contrib.auth import authenticate,logout as auth_logout,login as auth_login
def login(request):
if request.method == 'GET':
form = userForm()
return render(request, "login.html",{'form':form})
form = userForm(request.POST)
username = form.data['username']
password = form.data['password']
user = authenticate(username=username,password=password)
# 验证当前账号密码是否匹配合法
if user and user.is_active:
auth_login(request, user)
return redirect('/')
else:
return render(request, "login.html",{'form':form,'errors':'用户名或密码错误'})
在用户登录成功之后,将会重定向到主页,主页展示当前登录用户
登录用户可以直接在request.user
属性中获取到,主页的模板内容如下
<!DOCTYPE html>
<html>
<head>
<title>主页</title>
</head>
<body>
欢迎你: {{ user }}
</body>
</html>
主页视图函数可以通过装饰器@login_required
或判断is_authenticated
状态来查看用户是否登录
只有登录用户可以访问该站点
当使用装饰器@login_required
时,需要在settings
下设置LOGIN_URL = '/login/'
将该属性设置为登录路由
from django.contrib.auth.decorators import login_required
#@login_required
def index(request):
if request.user.is_authenticated():
return render(request, "index.html")
else:
return redirect('/login/')
#forms.py
class RegisterForm(forms.Form):
username = forms.CharField(label="用户名",
max_length=30,
required=True,
error_messages={'max_length':'账号长度最长为30'},
)
password = forms.CharField(label="密码",
min_length=6, max_length=30,
widget=forms.PasswordInput(),
required=True,
error_messages={'min_length':'密码长度最短为6'},
)
check_password = forms.CharField(label="重复密码",
min_length=6, max_length=30,
widget=forms.PasswordInput(),
required=True,
error_messages={'min_length':'密码长度最短为6'},
)
def clean_check_password(self):
password = self.cleaned_data.get('password')
check_password = self.cleaned_data.get('check_password')
if password != check_password and password and check_password:
raise ValidationError("重复输入密码错误")
def clean_username(self):
username = self.cleaned_data.get('username')
if username[:1] == '_':
raise forms.ValidationError("用户名不能以下划线打头")
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError("用户名已存在")
表单中,将对用户两次输入的密码进行校验并判断是否为空,而且不允许下划线作为用户名的开头字符
#views.py
def register(request):
if request.method == 'POST':
form = RegisterForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
User.objects.create_user(username=username,password=password)
user = authenticate(username=username,password=password)
auth_login(request, user)
return redirect('/')
else :
form = RegisterForm()
return render(request, "register.html",{'form':form})
通过表单验证,并获取到对应用户账号密码,创建成功之后,验证并登录,并且重定向到首页
<!DOCTYPE html>
<html>
<head>
<title>注册</title>
</head>
<body>
{% if request.user.is_authenticated %}
<p>您已登录:</p> {{ user }}
{% else %}
<form action='/register/' method="POST">
{% csrf_token %}
{% for field in form %}
<label>
{% if field.errors %}
<ul>
{% for error in field.errors%}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</label>
<p>{{ field.label }}: {{ field }}</p>
{% endfor %}
<input type="submit" value="注册">
</form>
{% endif %}
</body>
</html>
当用户已经登录时,显示当前登录用户,反之则展示表单,以供用户填写
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。