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'

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

相关内容

热门资讯

AI做攻略、“双向奔赴”……国... 本文转自:人民网人民网记者 许维娜今年国庆假期,AI(人工智能)成了不少年轻人的“旅行搭子”。行前做...
合肥的这个“梗”, 翻篇了 社交平台的评论区,曾长期流传一句专属于合肥的黑色幽默。有人问合肥哪里好玩,本地网友半开玩笑地回复:合...
7万+旅游中高层都在的群,今天... 做旅游这行,资源卡位、渠道互通、项目落地——往往就差一个“对的机会”。我们的行业社群已聚集70,00...
一场帐篷音乐节,如何让井研从“... 帐篷音乐节现场封面新闻记者 周洪攀10月的研溪湿地,晚风里裹着柑橘的清甜与民谣的回响。夜幕降临,10...
白鹤翩翩落星愿,上海迪士尼度假... 10月9日,世界候鸟日前夕,上海迪士尼度假区星愿公园的湖风里多了一分白鹤的灵动。三座白鹤雕塑正式揭幕...
成都锦江边赏初秋枫叶飘飘 目前,成都锦江边国华街枫叶树红了。近年来,国华街附近的几条街都栽种了红枫树,是城区较集中看枫叶的点位...
GBTA:商务旅行正在复苏,但... 亚太正在成为全球商务旅行增长的重要引擎。在经历疫情后的快速反弹之后,全球商务旅行正在进入一个新的增长...
从景区焕新到节赛引流 邹城双节... 齐鲁网·闪电新闻10月9日讯 中秋、国庆“双节”假期,邹城市文化和旅游局提前谋划、周密部署,立足自身...
江山如此多娇 且看石楼今朝 金秋十月,黄河岸畔秋意盎然,丰收盛会喜迎国庆。本次石楼国庆文旅活动以“江山如此多娇,且看石楼今朝”为...
海南国庆假期接待游客475.4... 2026年国庆假期,海南接待游客475.40万人次,较2025年增长13.1%,较2024年增长15...