当前位置: 首页 > news >正文

公司集团网站建设武汉seo招聘网

公司集团网站建设,武汉seo招聘网,广告策划案例范文,网站动画效果怎么做的教程:在Django中实现微信授权登录 本教程将引导您如何在Django项目中实现微信授权登录。在本教程中,我们将使用自定义的用户模型User,并通过微信提供的API来进行用户认证。 在进行以下教程之前,请确保你已经在微信开放平台添加了…

教程:在Django中实现微信授权登录

本教程将引导您如何在Django项目中实现微信授权登录。在本教程中,我们将使用自定义的用户模型User,并通过微信提供的API来进行用户认证。

在进行以下教程之前,请确保你已经在微信开放平台添加了网站应用,并获得了:

1.WECHAT_APPID

2.WECHAT_SECRET

3.以及设置了回调域(即认证的网址)

WECHAT_REDIRECT_URI 比如,我的回调域就是:https://www.xxx.com,Django的url中我则写成/wechat/callback/,视图中就可以进行回调使用了,这个没有绝对,重要的是设置自己的网址为回调域

第1步:创建自定义用户模型

首先,在您的Django应用中创建一个自定义的用户模型。在models.py文件中定义模型:

from django.db import models# 这里一定要继承AbstractUser才行
from django.contrib.auth.models import AbstractUserclass User(AbstractUser):# 不需要显式添加id字段,Django会自动创建openid = models.CharField(max_length=128, unique=True, null=True, blank=True)username = models.CharField(max_length=150, null=True, unique=True)# 不需要再次声明password字段,因为AbstractUser类已经包含了password字段# email字段已在AbstractUser中定义,只需指定null和blank即可email = models.EmailField(null=True, blank=True)phone_number = models.CharField(max_length=15, null=True, blank=True)real_name = models.CharField(max_length=128, null=True, blank=True)creation_date = models.DateTimeField(auto_now_add=True)role_type = models.CharField(max_length=50, null=True, blank=True)avatar = models.URLField(null=True, blank=True)gender = models.CharField(max_length=10, null=True, blank=True)birthday = models.DateField(null=True, blank=True)address = models.CharField(max_length=255, null=True, blank=True)# 新增加的微信字段nickname = models.CharField(max_length=64, null=True, blank=True)sex = models.PositiveSmallIntegerField(choices=((0, '未知'), (1, '男'), (2, '女')), null=True, blank=True)language = models.CharField(max_length=32, null=True, blank=True)city = models.CharField(max_length=32, null=True, blank=True)province = models.CharField(max_length=32, null=True, blank=True)country = models.CharField(max_length=32, null=True, blank=True)headimgurl = models.URLField(null=True, blank=True)privilege = models.JSONField(default=list, blank=True, null=True)  # 使用可调用的默认值unionid = models.CharField(max_length=128, null=True, blank=True)# last_login字段已经在AbstractBaseUser中,不需要重复声明# 如果你没有特别需要覆盖save()方法,也可以省略这个方法# def save(self, *args, **kwargs):#     super(User, self).save(*args, **kwargs)@classmethoddef create_or_update_from_wechat(cls, wechat_data):user, created = cls.objects.update_or_create(openid=wechat_data['openid'],defaults={'nickname': wechat_data.get('nickname', ''),'sex': wechat_data.get('sex', 0),'language': wechat_data.get('language', ''),'city': wechat_data.get('city', ''),'province': wechat_data.get('province', ''),'country': wechat_data.get('country', ''),'headimgurl': wechat_data.get('headimgurl', ''),'privilege': wechat_data.get('privilege', []),'unionid': wechat_data.get('unionid', ''),})return user

第2步:配置settings.py

settings.py文件中进行以下配置:

# 登录认证系统后端,二者任选其一即可
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend','allauth.account.auth_backends.AuthenticationBackend',
]# index 是应用的名字,User 是你的自定义用户模型的类名
AUTH_USER_MODEL = 'index.User'# 用户登录的url名称
LOGIN_URL = "user_login"# 登录成功调回地址的url名称
LOGIN_REDIRECT_URL = "index"

第3步:实现登录视图

views.py中创建登录视图和微信回调视图:

from django.shortcuts import redirect
from django.conf import settings
import requests
from urllib.parse import quote
from django.http import HttpResponseRedirect
from django.contrib.auth import logout
from django.http import JsonResponse
from .models import User
from django.contrib.auth import login
from django.utils import timezonedef user_login(request):appid = settings.WECHAT_APPIDredirect_uri = quote(settings.WECHAT_REDIRECT_URI)url = f"https://open.weixin.qq.com/connect/qrconnect?appid={appid}&redirect_uri={redirect_uri}&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect"return HttpResponseRedirect(url)def logout_view(request):logout(request)# 重定向到登录页面或者主页return redirect('index')def wechat_login_callback(request):code = request.GET.get('code')# 利用code获取access_tokenappid = settings.WECHAT_APPIDsecret = settings.WECHAT_SECRETurl = f'https://api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={secret}&code={code}&grant_type=authorization_code'response = requests.get(url)data = response.json()access_token = data.get('access_token')openid = data.get('openid')url = f'https://api.weixin.qq.com/sns/userinfo?access_token={access_token}&openid={openid}'response = requests.get(url)user_info = response.json()# 创建或者更新用户信息user = User.create_or_update_from_wechat(user_info)# 更新 last_login 字段user.last_login = timezone.now()user.save(update_fields=['last_login'])# 选择要登录的后端认证系统,这里可以选择Django自带的,也可以选择微信的backend = 'django.contrib.auth.backends.ModelBackend'# backend = 'allauth.account.auth_backends.AuthenticationBackend'user.backend = backend  # 设置用户实例的后端属性login(request, user, backend=backend)  # 登录用户,传入backend参数# 这里我随便写了一个url名称return redirect("bbworld")

第4步:配置URLs

urls.py中将路径与视图关联起来:

from django.urls import path
from . import viewsurlpatterns = [path('login/', views.user_login, name='user_login'),path('logout/', views.logout_view, name='logout'),path('wechat/callback/', views.wechat_login_callback, name='wechat_callback'),# 其他URLs...
]

第5步:使用@login_required装饰器保护视图

在任何需要用户登录的视图前使用@login_required装饰器:

from django.shortcuts import render
from django.contrib.auth.decorators import login_required@login_required
def bbworld(request):return render(request, 'bbworld.html')

第6步:处理未登录的重定向

当用户尝试访问受@login_required保护的页面时,他们将被重定向到在settings.py中定义的LOGIN_URL,然后授权登录成功后反调回LOGIN_REDIRECT_URL = “index”。

在Django中,当您对模型进行了更改之后,例如添加了新的字段或修改了字段的类型,您需要创建一个新的数据库迁移以便将这些更改应用到数据库中。以下是如何进行数据迁移的步骤:

第7步:数据迁移到数据库

这一步也可以建好模型的时候就进行操作,另外,确保setting里面已经设置好了数据库,无论是sqlite还是mysql

python manage.py makemigrations
python manage.py migrate

第8步:运行和测试

运行您的Django项目并测试登录流程。确保所有URLs正确配置,并且重定向和回调都按预期工作。

python manage.py runserver

访问登录URL,并通过微信扫码登录来测试整个流程。

以上就是在Django中实现微信授权登录的基本步骤。

因为这个事情,花了我很多时间,我也希望你能通过我的教程,快速完成业务,如果有不清楚的,欢迎留言咨询,我会第一时间回复,谢谢,祝你也学习愉快!

http://www.hkea.cn/news/433650/

相关文章:

  • 帮人做网站 怎么收费怎么用网络推广
  • 网站排名优化建设百度广告投放技巧
  • 文件服务器网站搭建教程好的竞价托管公司
  • 黑龙江省城乡和住房建设厅网站首页百度链接地址
  • 网站模板修改工具专业seo关键词优化
  • 口碑好的句容网站建设yahoo搜索
  • 深圳网站建设外贸公司价格网络营销的背景和意义
  • 长春网站建设硕成传媒seo快速排名优化公司
  • web网站开发能使用c 吗免费建立个人网站申请
  • 织梦网站修改教程视频网站优化培训学校
  • 南沙区交通和建设局网站中国十大网络销售公司
  • 免费建设网站的方法百度网址大全 官网
  • 手机网站设计制作公司微信推广费用一般多少
  • 建设网站需要什么注册域名费用一般多少钱
  • 女性门户网站源码百度指数功能有哪些
  • 怎么帮公司做网站建设谷歌搜索引擎免费入口 香港
  • 请写出网站建设前期需要做的准备外贸定制网站建设电话
  • 南京门户网站建设网络营销优秀案例
  • 2012服务器如何做网站周口网络推广哪家好
  • 贵阳搜索玩的网站网络舆情软件免费入口
  • 前端自己写代码建网站要花多少钱游戏推广在哪里接活
  • 网站建设中+网页代码nba最新排名东西部
  • 东莞企业建设网站官网有限公司百度推广深圳分公司
  • 海外推广工作内容搜索引擎优化seo是什么
  • wordpress 发短信西安网络优化大的公司
  • dreamweaver个人网站南宁求介绍seo软件
  • 网站常用素材企业培训视频
  • 北京市通州区建设委员会网站网站新站整站排名
  • 太原网站推广只选中联传媒推广排名seo
  • 企业网站建设的常见流程为百度互联网营销顾问