Django搭建个人博客Blog-Day04
admin
2024-05-12 02:37:43
0

实现不同的方式进行登录

登录的本质,就是去数据库中根据用户名查询出一条数据,然后再将用户输入的密码进行加密,然后拿这个加密后的密码和数据库中已经保存好的进行对比。

  1. 在/user/views.py文件中定义一个类,继承Django的ModelBackend,重写authenticate方法。

from django.contrib.auth.backends import ModelBackend
class CustomBackend(ModelBackend):# 改写默认的认证方法# 我想改成用户名和邮箱都可以进行认证def authenticate(self, request, username=None, password=None, **kwargs):try:user = User.objects.get(Q(username=username)|Q(email=username))# select * from user where username=username or email=emailif user.check_password(password):return userexcept Exception as err:return None
  1. 在setting/dev.py文件中进行设置,告诉Django修改了默认的内容

# 添加如下代码
AUTHENTICATION_BACKENDS = ['user.views.CustomBackend'
]

退出登录

  1. 在/apps/user/views.py文件中添加退出登录的方法(函数):

# 退出登录的方法
from django.contrib.auth import logoutdef user_logout(request):logout(request)   return redirect(reverse('user:login'))
  1. 添加退出登录的路由(/apps/user/urls.py)

from django.urls import path
from . import viewsapp_name = 'user'urlpatterns = [# 注册path('register',views.Register.as_view(),name='register'),# 登录path('login',views.Login.as_view(),name='login'),# 退出登录path('logout',views.user_logout,name='logout'),
]
  1. 对前端的代码做一些优化(base.html)

{% load staticfiles %}



{% block title %}{% endblock %}





{% block content %}{% endblock content %}



Copyright © xxx

实现登陆限制,指定某些url只有登陆了以后才能访问

在blog/blog/apps/user/views.py文件中添加如下方法:

# 重写一个类   重写as_view的方法  只有登录了才能访问
class  LoginRequired(View):@classmethoddef as_view(cls, **initkwargs):view = super().as_view()return login_required(view)

只要继承了这个类的类视图,只有登录了之后才能访问

如果登录了,就能正常访问,没有登录,可以在Django中配置自动跳转到指定的页面(一般都是登录界面)

在setting/dev.py文件中添加如下设置,指定没有登陆的时候要跳转到的页面:

LOGIN_URL = '/login'

通过邮件重置密码

  1. 安装第三方库

pip install django-password-reset
  1. 开启QQ邮箱设置中的“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”

  1. 在setting/dev.py文件中添加如下配置:

EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 25                 #发件箱的smtp服务器端口
EMAIL_HOST_USER = '@qq.com'     # 你的 QQ邮箱 账号
EMAIL_HOST_PASSWORD = ''        #QQ邮箱授权码
EMAIL_USE_TLS = True            # 这里必须是 True,否则发送不成功
EMAIL_FROM = '@qq.com'          # 你的 QQ邮箱 账号
DEFAULT_FROM_EMAIL = '@qq.com'     # 你的 QQ邮箱 账号INSTALLED_APPS = ['password_reset',# 注册APP
]
  1. 配置总路由(blog/urls.py)

from django.contrib import admin
from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),# 进行路由分发path('user/',include('user.urls')),path('password-reset',include('password_reset.urls')),
]

个人中心

  1. 在blog/blog/apps/user/views.py文件中添加如下方法:

# 个人中心
class Info(LoginRequired):  # as_view   重写这个方法# 展示个人中心html页面def get(self,request,id):return render(request,'user/info.html')# 实现用户中心的功能逻辑def post(self,request,id):   # 细节的时候# 本质 ===》修改已经存在的用户的一些数据?user = get_object_or_404(User,pk=id)# get_object_or_404(模型的类名,条件)# 如果找到了对应的哪一条数据,就返回数据# 如果没找到,就返回一个404错误# 1. 接受参数   数据校验  数据入库   返回结果user.phone = request.POST.get('phone')user.bio = request.POST.get('bio')avater = request.FILES.get('avater')# 重新上传了头像才更改if avater:user.avater = avateruser.save()return redirect(reverse('user:login'))
  1. 设置路由(blog/blog/apps/user/urls.py):

from django.urls import path
from . import viewsapp_name = 'user'
urlpatterns = [# 注册path('register',views.Register.as_view(),name='register'),# 登录path('login',views.Login.as_view(),name='login'),# 退出登录path('logout',views.user_logout,name='logout'),# 个人中心   html的展示  get 数据的提交?  post# 应不应该有参数?  所有的人都可以去个人中心 个人中心===》只针对已经登录的用户的path('info/',views.Info.as_view(),name='info'),
]
  1. 上传的文件要想展示,必须要在总路由blog/urls.py文件中进行如下配置

from django.contrib import admin
from django.urls import path,include
from django.conf.urls.static import static
from django.conf import settingsurlpatterns = [...
]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
  1. 在templates/user路径下创建info.html文件:

{% extends "base.html" %}
{% block title %} 用户信息 {% endblock title %}
{% block content %}

用户名: {{ user.username }}

{% if user.avater %}
头像
{ user.avater.url }}" style="max-width: 20%; border-radius: 15%;" class="col-md-4"> {# #}{% else %}
暂无头像
{% endif %}

{# #}{% csrf_token %}
{ user.phone }}"> {# #}
{# #}
{% endblock content %}

使用并优化admin管理后台

可以使用路由:127.0.0.1:8000/admin进入并查看系统自带的后台系统

  1. 创建超级管理员用户(在虚拟环境下,并且manage.py所在的路径下)

python manage.py createsuperuser
  1. django自带的admin管理后台比较简单,所以我们可以用第三方库来美化一下

pip install django-simpleui
  1. 下载成功之后,记得在配置文件dev.py中加入app

INSTALLED_APPS = ['simpleui', # 细节点,要放在django自带的前面'django.contrib.admin',  # 自带的admin管理后台
]
  1. 将user模块加入admin管理后台进行管理,在user/admin.py中配置

from django.contrib import admin
from user.models import User# 创建一个ModelAdmin的子类
class UserAdmin(admin.ModelAdmin):list_display = ['username','email','phone','create_time']search_fields = ['username','email']# 将模型和ModelAdmin结合起来
admin.site.register(User,UserAdmin)
admin.site.site_header = '老杨的博客管理后台'
admin.site.site_title = '博客管理后台'
  1. 在dev.py的配置文件中可以设置隐藏右边的广告链接和使用分析

# 隐藏右侧SimpleUI广告链接和使用分析
SIMPLEUI_HOME_INFO = False
SIMPLEUI_ANALYSIS = False
  1. 在user/models.py中进行如下更改:

class User(AbstractUser,BaseModel):...   class Meta:  db_table = 'blog_users'      verbose_name = '用户'     # 新增verbose_name_plural = verbose_name  # 新增
  1. 在user/apps.py中添加如下代码:

from django.apps import AppConfigclass UserConfig(AppConfig):name = 'user'verbose_name = '用户管理'
  1. 在user/__init__.py中添加如下代码:

default_app_config='user.apps.UserConfig'

这样就可以使用新的更好看的后台界面了

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...