『入行全栈 Django3.x 个人主页网站全记录』7.后台控制管理应用开发_Mr数据杨的博客-程序员秘密

技术标签: python  博客  django  Python-Django 自开发开源项目  

项目全文索引

『入行全栈 Django3.x 个人主页网站全记录』项目总览介绍

后台控制管理后台功能开发和配置。相当于一个后台的总的控制文件,为各个应用分配方法、类。

其中项目中数据迁移部分不做说明,执行CMD命令。

python manage.py makemigrations  # 迁移到我们数据库
python manage.py migrate # 同步到数据库

应用创建&配置

1.创建应用
进入文件根目录执行CMD命令创建新闻资讯应用,并将创建好的应用文件夹移动到目录的apps下即可。

cd MyHome
python manage.py startapp Configuration

将创建好的应用文件夹移动到目录的apps下即可

2.配置应用模块

在settings.py文件中修改

INSTALLED_APPS = [
	...
	# 添加文章应用
    'apps.Configuration',

3.不需要修改该的文件

  1. admin.py 这个我们使用xadmin代替的原有版本的admin,因此这个文件不需要修改该
  2. apps.py 应用的配置文件,不需要动
  3. test.py 测试执行脚本,不需要动

管理 adminx.py

# -*- coding: utf-8 -*-
__author__ = 'Mr数据杨'
__explain__ = '我的主页adminx后台配置文件'

from apps.MyHomePage.adminx import *
from apps.User.adminx import *
from apps.StatisticalData.adminx import *
from apps.Blog.adminx import *
from apps.Comment.adminx import *
import xadmin
from xadmin import views


# xadmin后台全局设置 主题功能开启
class BaseSetting(object):
    enable_themes = True  # 启用后台主题
    use_bootswatch = True  # 切换主题模式


# xadmin后台菜单设置
class GlobalSettings(object):
    site_title = "我的个人主页"  # 设置站点标题
    site_footer = "Mr数据杨制作"  # 设置站点的页脚
    menu_style = "accordion"  # 设置菜单折叠

    def get_site_menu(self):
        MyHomePageMenu = {
    'title': '主页管理', 'menus': (
            {
    'title': '个人介绍', 'url': self.get_model_url(MyInformation, 'changelist')},
            {
    'title': '技能介绍', 'url': self.get_model_url(MySkill, 'changelist')},
            {
    'title': '教育&职业信息', 'url': self.get_model_url(EducationExperience, 'changelist')},
            {
    'title': '教育&职业列表', 'url': self.get_model_url(EducationExperienceList, 'changelist')},
            {
    'title': '收费服务信息', 'url': self.get_model_url(MyService, 'changelist')},
            {
    'title': '收费服务列表', 'url': self.get_model_url(MyServiceList, 'changelist')},
            {
    'title': '项目信息', 'url': self.get_model_url(MyProject, 'changelist')},
            {
    'title': '项目类别', 'url': self.get_model_url(MyProjectType, 'changelist')},
            {
    'title': '项目列表', 'url': self.get_model_url(MyProjectList, 'changelist')},
            {
    'title': '自媒体信息', 'url': self.get_model_url(MyArticle, 'changelist')},
            {
    'title': '自媒体列表', 'url': self.get_model_url(MyArticleList, 'changelist')},
            {
    'title': '联系我的信息', 'url': self.get_model_url(ContactMe, 'changelist')},

        )}

        UserMenu = {
    'title': '用户管理', 'menus': (
            {
    'title': '用户信息管理', 'url': self.get_model_url(UserProfile, 'changelist')},
            {
    'title': '用户订阅管理', 'url': self.get_model_url(UserSubscription, 'changelist')},
            {
    'title': '用户邮件管理', 'url': self.get_model_url(UserEmailVerifyRecord, 'changelist')},
            {
    'title': '阅读记录管理', 'url': self.get_model_url(UserRead, 'changelist')},
        )}

        StatisticalDataMenu = {
    'title': '统计信息', 'menus': (
            {
    'title': '网站访问总次数', 'url': self.get_model_url(VisitTotalNumber, 'changelist')},
            {
    'title': '网站日访问量统计', 'url': self.get_model_url(VisitEveryDayNumber, 'changelist')},
            {
    'title': '网站访问IP地址', 'url': self.get_model_url(VisitIpPart, 'changelist')},
            {
    'title': '访问IP记录汇总', 'url': self.get_model_url(VisitEveryIpCount, 'changelist')},
        )}

        ArticlesMenu = {
    'title': '文章管理', 'menus': (
            {
    'title': '类别管理', 'url': self.get_model_url(ArticleCategory, 'changelist')},
            {
    'title': '栏目管理', 'url': self.get_model_url(ArticleItem, 'changelist')},
            {
    'title': '标签管理', 'url': self.get_model_url(ArticleTag, 'changelist')},
            {
    'title': '文章编辑管理', 'url': self.get_model_url(Articles, 'changelist')},
        )}

        CommentMenu = {
    'title': '评论管理', 'menus': (
            {
    'title': '评论明细', 'url': self.get_model_url(Comment, 'changelist')},
        )}

        return (
            MyHomePageMenu, UserMenu, StatisticalDataMenu, ArticlesMenu, CommentMenu
        )


xadmin.site.register(views.CommAdminView, GlobalSettings)  # 全局设置加载
xadmin.site.register(views.BaseAdminView, BaseSetting)  # 注册主体风格切换

渲染模板 config_html.py

# 用户注册
UserRegisterHtml = "User/register.html"
# 用户登陆
UserLoginHtml = "User/login.html"
# 用户找回密码
UserForgotPasswordHtml = "User/forgot.html"
# 用户重置密码
UserResetPasswordHtml = "User/reset_password.html"
ResetRedirectHtml = "User/reset_redirect.html"

消息配置 config_msg.py

# 用户注册
ErrorRegisterMsg = "注册信息冲突,请重新填写,如有疑问请联系管理员"
# 用户登陆
ErrorLoginNoUser = "用户不存在,请填写正确信息或重新注册"
ErrorLogin = "用户注册信息有误,请重新填写"
# 用户找回密码
ErrorForgotMsg = "填写的联系电话与邮箱不匹配,请重新输入"
# 用户重置密码
ErrorResetMsg = "填写信息有误,请重新填写"
ErrorPasswordMsg = "两次输入的密码不一致,请重新填写"
SuccessResetMsg = "修改密码成功,使用新密码登录"

工具程序 config_utils.py

from django.template import loader
from random import Random
from MyHome.settings import *
from django.core.mail import EmailMessage
import datetime
from apps.User.models import *


# 随机生成邮件验证码的随机字符串
def RandomsStr(random_length):
    Str = ''
    chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'  # 设置可选字符
    length = len(chars) - 1
    random = Random()
    for i in range(random_length):
        Str += chars[random.randint(0, length)]
    return Str


# 发送邮件设置
def SendEmail(username, email, send_type):
    # 生成20位的验证码
    code = RandomsStr(20)
    # 设置邮箱验证内容的字典
    CodeDict = {
    
        'register': {
    
            "EmailTitle": "欢迎注册Mr.数据杨的个人博客空间,请点击注册激活链接",
            "EmailHtml": "User/EmailRegister.html",
            "EmailUrl": WebBaseUrl + '/EmailVerifyRecord?Username={}&Type={}&Code={}'.format(username, send_type, code)
        },
        'forgot': {
    
            "EmailTitle": "欢迎Mr.数据杨的个人博客空间,请点击找回密码链接",
            "EmailHtml": "User/EmailForgot.html",
            "EmailUrl": WebBaseUrl + '/EmailVerifyRecord?Username={}&Type={}&Code={}'.format(username, send_type, code)
        },
    }
    # 根据send_type确定邮件的内容
    EmailTitle = CodeDict[send_type]["EmailTitle"]
    EmailHtml = CodeDict[send_type]["EmailHtml"]
    EmailUrl = CodeDict[send_type]["EmailUrl"]

    # 将邮件验证信息保存
    user_email_verify_record = UserEmailVerifyRecord()
    user_email_verify_record.username = username
    user_email_verify_record.send_type = send_type
    user_email_verify_record.email = email
    user_email_verify_record.code = code
    user_email_verify_record.save()

    # 发送邮件功能
    EmailBody = loader.render_to_string(
        EmailHtml,  # 需要渲染的html模板
        {
    "email_url": EmailUrl}  # 邮箱验证信息的url参数
    )
    msg = EmailMessage(EmailTitle, EmailBody, EMAIL_FROM, [email])
    msg.content_subtype = "html"
    msg.send()


# 用于验证获取时间是否在有效范围内
def CheckTime(record_time):
    start_time = record_time
    end_time = datetime.datetime.now()
    time_interval_seconds = (end_time - start_time).seconds
    if time_interval_seconds <= 2000:
        return True
    else:
        return False

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_20288327/article/details/120074551

智能推荐

c语言结构体及成员的互换,并且打印结构体地址和成员地址_折花刀的博客-程序员秘密_打印结构体地址

#include #define offsetof(TYPE , MEMBER)((size_t) &((TYPE *)0)->MEMBER)//container_of是给定结构体某个成员的地址反推其结构体地址#define container_of(ptr , type , member)({ \const typeof(((type *)0)->member)*

Android Studio 全局查找_yijiaodingqiankun的博客-程序员秘密_android studio 全局搜索

记住这个方法,不怕快捷键变化。在edit栏里找到Find-----Find in path,就可以全局查找了。。。

【原创】zstack - 协议栈程序精简日志-IO口外部中断试验_池上好风的博客-程序员秘密

【原创】zstack - 协议栈程序精简日志-IO口外部中断试验闲来无事测试zstack协议栈的记录。说明:本次试验端口P0.6 ,硬件上与按键电路相同,触发电平为低电平,下降沿触发。由于该端口与按键端口同属P0口,硬件电路相同,所以,程序可以完全参考按键程序部分。本实验程序如下: hal_key.c中添加如下程序:/*******************ISR_TEST 外部中断试验******

ubuntu 安装 xv 图像查看软件_珠峰上的蓝天的博客-程序员秘密_ubuntu安装7yuv

1 ubuntu 16.04以下版本(不包括16.04)先安装snap,可以在软件中心搜索并安装,也可以在终端输入sudo apt-get update , sudo apt-get install snapd2 ubuntu 16.04以上版本系统已安装snap,无需重新安装。打开终端输入 sudo snap install xv --edge,如果不能正常安装则按照提示输入 sudo s...

什么是商城_yijia1111的博客-程序员秘密_商城是什么

1.什么是网站商城系统网上商城系统又称在线商城系统,是一个功能完善的在线购物系统,主要为在线销售和在线购物服务。其功能主要分为两部分,一部分是面向用户部分,包含:用户在线注册、购物、提交订单、付款等操作;另一部分是商城管理部分,这部分的内容包括:产品的添加、删除、查询、订单的管理、操作员的管理、注册会员的管理等。随着互联网的发展成熟,网上商城系统的搭建能够帮助企业把现有的业务系统整合,集中优势...

第二届祥云杯高校组决赛Pwn题-----Easypwn_qq_43710556的博客-程序员秘密

记录参加的第二届祥云杯决赛的一道简单Pwn题,主要考察了bypass canary&amp;&amp;python调用C语言库函数,当时还没做出来,太菜了查看一下程序的保护措施,发现只开启了Canary保护,并且是Partial RELRO通过IDA分析,程序主要的逻辑有:(1)通过prelogue调用rand()函数生成8位的密码,保存在bss段上,并且随机数的种子是time(0)(2)看到gets函数,明显的栈溢出,但是因为存在canary,并且无法通过gets函数泄露canary,所

随便推点

#每周一篇论文2#[感知] 激光雷达外参数自标定_听雨听风眠的博客-程序员秘密

目录激光雷达外参数自标定点云滤波设置ROI地平面分割计算变换矩阵系统评价参数输出最优输出激光雷达外参数自标定基于激光雷达的车载三维重建系统和感知系统工作时需要对激光雷达的外参数(三个旋转参数和三个平移参数)进行标定。激光雷达的外参数的标定是指求解激光雷达测量坐标系相对于其他传感器测量坐标系的相对变换关系,即旋转平移变换矩阵。本方法进行激光雷达外参标定使用的方法是求解激光雷达的地平面与理想地平面的变换矩阵,方法可分为以下步骤:点云滤波设置ROI使用RANSCAN算法进行地平面分割提取激光雷达

C++:onnxruntime调用FasterRCNN模型_君莫笑xxx的博客-程序员秘密_c++调用onnx模型

背景: 最近由于项目原因,需要用C++做一些目标检测的任务,就捣鼓一下YOLOv5,发现部署确实很方便,将YOLOv5模型转为onnx模型后,可以用OpenCV的dnn.readNetFromONNX读取该模型,接着就是输入预处理和输出结果解析的事情。 然而,当我将tf15训练得到的FasterRCNN模型并利用tf2onnx成功转为onnx模型后,却不能用OpenCV读取,报出以下错误,而onnxruntime可以成功调用该模型。

机器学习-分类模型(鸢尾花案例)_有点意思嘿的博客-程序员秘密_鸢尾花分类模型

众所周知,鸢尾花根据 '花瓣长度','花瓣宽度','花萼长度','花萼宽度',分为三类,在数据集中分别用0,1,2来表示类别本次就是通过对鸢尾花特征进行训练来判断出为哪一类,用到了分类算法的4个模型一 导入库函数和数据集,该数据已经分好了训练集和测试集,直接导入import numpy as npimport pandas as pdimport matplotlib.pyplot as pltdata_train = pd.read_csv('./iris_training.csv'

初次登录Ubuntu20.04 server如何连接WIFI_kyle-fang的博客-程序员秘密_ubuntu怎么连接wifi

刚刚安装好的Ubuntu server 如何连接到WIFI呢,这可能会让一些人摸不着头脑,网上哼多方法都不管用 , 最后我在Ubuntu的官网找到了解决办法在终端输入:find -name network-config 返回一个路径,进入该路径所在的文件里:vim /boot/network-config保存退出,重启后,服务器就已经连接上WIFI了...

Reac Native入门技法三_weixin_34380948的博客-程序员秘密

第三篇,说一说页面跳转与传值。react-navigation组件使用来做页面跳转的。使用下面的命令进行安装。npm install --save react-navigation复制代码两个页面分别写在两个js文件中,第一个是index.android.js,第二个页面是Profile.js首先是index.android.jsimport React, { Component }...

CoordinatorLayout使用_weixin_30733003的博客-程序员秘密

1.CoordinatorLayout的用处:监听滑动控件的滑动通过Behavior反馈到其他子控件并执行一些动画。注意:滑动控件指的是:RecyclerView/NestedScrollView/ViewPager,意味着ListView、ScrollView不行。2.监听滑动控件:RecyclerView自定义FloatingActionButtion.Behavior与...

推荐文章

热门文章

相关标签