日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 认证_Django 用户认证

發(fā)布時(shí)間:2025/3/19 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 认证_Django 用户认证 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

內(nèi)置用戶認(rèn)證

django 的用戶分為三類,匿名用戶,普通用戶,超級(jí)用戶

普通用戶是無法登錄admin 后臺(tái)的的,因此我們的普通視圖使用這個(gè)用戶來管理

超級(jí)用戶是最高權(quán)限,可以登錄admin后臺(tái),可以使用python manage.py createsuperuser 來創(chuàng)建一個(gè)超級(jí)用戶

內(nèi)置用戶類型

匿名用戶.

普通類型

普通用戶是無法登錄admin 后臺(tái)的的,因此我們的普通視圖使用這個(gè)用戶來管理

def create_user(self, username, email=None, password=None, **extra_fields):

extra_fields.setdefault('is_staff', False)

extra_fields.setdefault('is_superuser', False)

return self._create_user(username, email, password, **extra_fields)

超級(jí)用戶

超級(jí)用戶是最高權(quán)限,可以登錄admin后臺(tái),可以使用python manage.py createsuperuser 來創(chuàng)建一個(gè)超級(jí)用戶

def create_superuser(self, username, email, password, **extra_fields):

extra_fields.setdefault('is_staff', True)

extra_fields.setdefault('is_superuser', True)

用戶認(rèn)證模式 -1: 用戶名

我們?cè)谟脩糇?cè)界面使用的是用戶名稱

使用內(nèi)值的form from django.contrib.auth.forms import UserCreationForm

創(chuàng)建對(duì)應(yīng)的模板文件signup.html

Sign up

{% csrf_token %}

{{ form.as_p }}

Sign up

:views.py

def signup(request):

"""

使用用戶名來注冊(cè)

:param request:

:return:

"""

if request.method == 'POST':

form = UserCreationForm(request.POST)

if form.is_valid():

form.save()

username = form.cleaned_data.get('username')

raw_password = form.cleaned_data.get('password1')

user = authenticate(username=username, password=raw_password)

login(request, user)

return redirect('article-list')

else:

form = UserCreationForm()

return render(request, 'pre_user/signup.html', {'form': form})

截圖如下

用戶認(rèn)證模式2: 有附加字段

在某些特殊情況下我們可能會(huì)在用戶注冊(cè)的時(shí)候需要輸入生日這個(gè)樣子的字段,但是User 并不包含該字段,因此我們需要擴(kuò)展User 模型

models.py

class Profile(models.Model):

""" 多余字段注冊(cè) """

user = models.OneToOneField(User, on_delete=models.CASCADE)

bio = models.TextField(max_length=500, blank=True)

location = models.CharField(max_length=30, blank=True)

birth_date = models.DateField(null=True, blank=True)

@receiver(post_save, sender=User)

def update_user_profile(sender, instance, created, **kwargs):

if created:

Profile.objects.create(user=instance)

instance.profile.save()

forms.py

class SignUpForm(UserCreationForm):

birth_date = forms.DateField(help_text='Required. Format: YYYY-MM-DD')

class Meta:

model = User

fields = ('username', 'birth_date', 'password1', 'password2', )

views.py

django.contrib.auth import login, authenticate

django.shortcuts import render, redirect

pre_user.forms import SignUpForm

signup(request):

if request.method == 'POST':

form = SignUpForm(request.POST)

if form.is_valid():

user = form.save()

user.refresh_from_db() # load the profile instance created by the signal

user.profile.birth_date = form.cleaned_data.get('birth_date')

user.save()

raw_password = form.cleaned_data.get('password1')

user = authenticate(username=user.username, password=raw_password)

login(request, user)

return redirect('article-list')

else:

form = SignUpForm()

return render(request, 'pre_user/signup.html', {'form': form})

4 . 模板文件不需要修改

截圖

用戶認(rèn)證模式2: 郵箱注冊(cè)

這是最常見的用戶注冊(cè)模式

擴(kuò)展用戶創(chuàng)建的forms.py

class SignUpForm(UserCreationForm):

""" 使用郵箱注冊(cè)"""

email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')

class Meta:

model = User

fields = ('username', 'email', 'password1', 'password2', )

views.py

(1) 注冊(cè)視圖

def signup(request):

if request.method == 'POST':

form = SignUpForm(request.POST)

if form.is_valid():

user = form.save(commit=False)

user.is_active = False

user.save()

current_site = get_current_site(request)

subject = 'Activate Your MySite Account'

message = render_to_string('pre_user/account_activation_email.html', {

'user': user,

'domain': current_site.domain,

'uid': urlsafe_base64_encode(force_bytes(user.pk)),

'token': account_activation_token.make_token(user),

})

# user.email_user(subject, message) # 給該用戶發(fā)送郵件

user.email_user(subject=subject, message='message',html_message=message) # 給該用戶發(fā)送郵件

return redirect('account_activation_sent')

# return HttpResponse("郵箱已經(jīng)發(fā)送,請(qǐng)前往驗(yàn)證")

else:

form = SignUpForm()

return render(request, 'pre_user/signup.html', {'form': form})

(2) 用戶激活郵箱

def activate(request, uidb64, token):

try:

uid = force_text(urlsafe_base64_decode(uidb64))

user = User.objects.get(pk=uid)

except (TypeError, ValueError, OverflowError, User.DoesNotExist):

user = None

if user is not None and account_activation_token.check_token(user, token):

user.is_active = True

user.profile.email_confirmed = True

user.save()

login(request, user)

return redirect('article-list')

else:

return render(request, 'pre_user/account_activation_invalid.html')

(3) 注冊(cè)鏈接

urls.py

urlpatterns = [

url(r'^signup/$', views.signup),

url(r'^login/$', auth_views.login,

{'template_name': 'pre_user/login.html', 'authentication_form': LoginForm}),

url(r'^activate/(?P[0-9A-Za-z_\-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',

views.activate, name='activate'),

url(r'^account_activation_sent/$', views.account_activation_sent, name='account_activation_sent'),

]

(4)模板

account_activation_email.html

{% extends 'pre_user/base.html' %}

{% block content %}

{% autoescape off %}

Hi {{ user.username }},

Please click on the link below to confirm your registration:

http://{{ domain }}{% url 'activate' uidb64=uid token=token %}

{% endautoescape %}

{% endblock %}

account_activation_sent.html

{% extends 'pre_user/base.html' %}

{% block content %}

郵件已經(jīng)發(fā)送

{% endblock %}

account_activation_invalid.html

{% extends 'pre_user/base.html' %}

{% block content %}

郵件格式不合法

{% endblock %}

總結(jié)

以上是生活随笔為你收集整理的python 认证_Django 用户认证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。