深圳做h5网站的公司,减肥推广,潍坊网络营销公司有哪些,白云区做网站#x1f34a;作者#xff1a;计算机编程-吉哥 #x1f34a;简介#xff1a;专业从事JavaWeb程序开发#xff0c;微信小程序开发#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事#xff0c;生活就是快乐的。 #x1f34a;心愿#xff1a;点… 作者计算机编程-吉哥 简介专业从事JavaWeb程序开发微信小程序开发定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事生活就是快乐的。 心愿点赞 收藏 ⭐评论 文末获取源码联系 精彩专栏推荐订阅 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 Python毕业设计精品项目《1000套》 微信小程序毕业设计精品项目《1000套》 大数据/机器学习毕业设计精品项目《1000套》 目录
1.技术选型
2.开发工具
3.功能
3.1【角色】
3.2【前台功能模块】
3.3【后台功能模块】
4.项目演示截图
4.1 首页
4.2 文章
4.3 公告资讯
4.4 登录
4.5 后台首页
4.6 用户管理
4.7 文章管理
4.8 系统管理
5.核心代码
5.1 Settings.py
5.2 Urls.py
5.3 Users_v.py
5.4 Auth.py
6.LW文档大纲参考 背景意义介绍 在数字化时代信息的快速传播和交流变得尤为重要。基于Flask和Vue.js的博客系统作为一种现代化的信息分享平台为用户提供了一个便捷、直观的个人表达和知识共享的空间。该系统通过结合Python的轻量级Web框架Flask和前端JavaScript框架Vue.js实现了前后端分离的架构提高了系统的性能和用户体验。 系统为管理员和普通用户提供了全面的服务和管理功能。用户可以通过注册和登录来创建个人博客、发表文章、参与评论和交流同时在个人中心管理个人信息、文章、举报信息和收藏。管理员则可以通过后台系统进行用户管理、标签管理、分类管理、文章审核、公告资讯发布和系统设置等确保平台内容的质量和合规性。 博客系统的建立不仅为用户提供了一个展示自我、分享知识和交流思想的平台也为内容创作者提供了一个便捷的内容发布和管理工具。此外系统的数据分析和消息通知功能可以帮助用户及时获取反馈和互动信息增强了用户之间的互动和社区的活跃度。 总之基于Flask和Vue.js的博客系统对于促进知识共享、提升信息传播效率、构建在线学习社区具有重要的现实意义是数字时代个人表达和知识传播的重要工具。 1.技术选型
Python、Flask、vue、elementui、html、css、js、mysql
2.开发工具
pycharm、navicat
3.功能
3.1【角色】
管理员、用户
3.2【前台功能模块】
登录注册首页文章公告资讯平台沟通个人中心个人中心、修改密码、文章、举报信息、消息通知、我的收藏
3.3【后台功能模块】
登录系统首页统计用户管理标签管理分类管理文章管理公告资讯管理举报信息管理消息通知管理系统管理我的信息
4.项目演示截图
4.1 首页 4.2 文章 4.3 公告资讯 4.4 登录 4.5 后台首页 4.6 用户管理 4.7 文章管理 4.8 系统管理 5.核心代码
5.1 Settings.py Django settings for dj2 project.Generated by django-admin startproject using Django 2.0.For more information on this file, see
https://docs.djangoproject.com/en/2.0/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.0/ref/settings/
import os
from concurrent.futures.thread import ThreadPoolExecutor
executor ThreadPoolExecutor(20)
from util.configread import config_read# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY w5yn#0gn2tt7pvu%hvwt0!lt!$6eqp4%m8)u3u#gknmjm)k# SECURITY WARNING: dont run with debug turned on in production!
DEBUG TrueALLOWED_HOSTS [*]# Application definitionINSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.staticfiles,main,corsheaders,
]MIDDLEWARE [django.middleware.security.SecurityMiddleware,django.contrib.sessions.middleware.SessionMiddleware,django.middleware.common.CommonMiddleware,# django.middleware.csrf.CsrfViewMiddleware,django.contrib.auth.middleware.AuthenticationMiddleware,django.contrib.messages.middleware.MessageMiddleware,django.middleware.clickjacking.XFrameOptionsMiddleware,threadlocals.middleware.ThreadLocalMiddleware,xmiddleware.xparam.Xparam,xmiddleware.xauth.Xauth,corsheaders.middleware.CorsMiddleware,django.middleware.common.CommonMiddleware,]
CORS_ALLOW_CREDENTIALS True
CORS_ORIGIN_ALLOW_ALL True
CORS_ALLOW_HEADERS (*)SESSION_ENGINE django.contrib.sessions.backends.cache
SESSION_COOKIE_NAME sessionid
SESSION_COOKIE_PATH /
SESSION_COOKIE_DOMAIN None
SESSION_COOKIE_SECURE False
SESSION_COOKIE_HTTPONLY True
SESSION_COOKIE_AGE 1209600
SESSION_EXPIRE_AT_BROWSER_CLOSE False
SESSION_SAVE_EVERY_REQUEST FalseROOT_URLCONF dj2.urls
TEMPLATES_DIR os.path.join(BASE_DIR, templates)
TEMPLATES [{BACKEND: django.template.backends.django.DjangoTemplates,DIRS: [TEMPLATES_DIR],APP_DIRS: True,OPTIONS: {context_processors: [django.template.context_processors.debug,django.template.context_processors.request,django.contrib.auth.context_processors.auth,django.contrib.messages.context_processors.messages,],},},
]WSGI_APPLICATION dj2.wsgi.applicationEMAIL_BACKEND django.core.mail.backends.smtp.EmailBackend
EMAIL_USE_TLS False
EMAIL_USE_SSL True
EMAIL_HOST smtp.qq.com
EMAIL_PORT 465
EMAIL_HOST_USER yclw9qq.com
EMAIL_HOST_PASSWORD mhbrkuayvkkgbijd# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases# DATABASES {
# default: {
# ENGINE: django.db.backends.sqlite3,
# NAME: os.path.join(BASE_DIR, db.sqlite3),
# }
# }dbtype, host, port, user, passwd, dbName, charset,hasHadoop config_read(config.ini)
dbNamedbName.replace( ,).strip()
print(dbtype, host, port, user, passwd, dbName, charset)if dbtype mysql:DATABASES {default: {# ENGINE: django.db.backends.sqlite3,# NAME: os.path.join(BASE_DIR, db.sqlite3),ENGINE: django.db.backends.mysql,OPTIONS: {sql_mode: traditional,init_command: SET sql_modetraditional, # STRICT_TRANS_TABLES},NAME: dbName,USER: user,PASSWORD: passwd,HOST: host,PORT: port,charset: charset,TEST: {CHARSET: charset,COLLATION: utf8_general_ci,},CONN_MAX_AGE:60},}
else:print(请使用mysql5.5数据库)os._exit(1)# Password validation
# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validatorsAUTH_PASSWORD_VALIDATORS [{NAME: django.contrib.auth.password_validation.UserAttributeSimilarityValidator,},{NAME: django.contrib.auth.password_validation.MinimumLengthValidator,},{NAME: django.contrib.auth.password_validation.CommonPasswordValidator,},{NAME: django.contrib.auth.password_validation.NumericPasswordValidator,},
]# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/LANGUAGE_CODE zh-Hans# TIME_ZONE UTC
TIME_ZONE Asia/ShanghaiUSE_I18N TrueUSE_L10N True# USE_TZ True
USE_TZ False# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/STATIC_URL /assets/
STATICFILES_DIRS [
os.path.join(BASE_DIR, templates/front/assets),
]# media
MEDIA_URL /media/ # 自定义
MEDIA_ROOT os.path.join(BASE_DIR, media) # 自定义
if os.path.isdir(MEDIA_ROOT) False:os.mkdir(MEDIA_ROOT)ALIPAY_APP_ID 9021000132629452
APP_PRIVATE_KEY_STRING open({}/util/alipay_key/app_private_2048.txt.format(BASE_DIR)).read()
ALIPAY_PUBLIC_KEY_STRING open({}/util/alipay_key/alipay_public_2048.txt.format(BASE_DIR)).read()
ALIPAY_SIGN_TYPE RSA25.2 Urls.py
dj2 URL ConfigurationThe urlpatterns list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/2.0/topics/http/urls/
Examples:
Function views1. Add an import: from my_app import views2. Add a URL to urlpatterns: path(, views.home, namehome)
Class-based views1. Add an import: from other_app.views import Home2. Add a URL to urlpatterns: path(, Home.as_view(), namehome)
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns: path(blog/, include(blog.urls))import os
from django.contrib import admin
from django.urls import path,include,re_path
from django.conf.urls import url
from django.views.static import serve
from django.views.generic import TemplateViewfrom . import views
from dj2.settings import dbName as schemaNameurlpatterns [path(xadmin/, admin.site.urls),path(rindex/,views.index),path({}/.format(schemaName),include(main.urls)),#导入schemaNamere_path(radmin/lib/(?Pp1.*)/(?Pp2.*)$, views.admin_lib2),re_path(radmin/lib/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)$, views.admin_lib3),re_path(radmin/lib/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)/(?Pp4.*)$, views.admin_lib4),re_path(radmin/page/(?Pp1.*)$, views.admin_page),re_path(radmin/page/(?Pp1.*)/(?Pp2.*)$, views.admin_page2),re_path(radmin/pages/(?Pp1.*)$, views.admin_pages),re_path(radmin/pages/(?Pp1.*)/(?Pp2.*)$, views.admin_pages2),re_path(rfront/(?Pp1.*)$, views.schema_front1),re_path(rfront/(?Pp1.*)/(?Pp2.*)$, views.schema_front2),re_path(rfront/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)$, views.schema_front3),re_path(rfront/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)/(?Pp4.*)$, views.schema_front4),re_path(r{}/front/(?Pp1.*)$.format(schemaName), views.schema_front1),re_path(r{}/front/(?Pp1.*)/(?Pp2.*)$.format(schemaName), views.schema_front2),re_path(r{}/front/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)$.format(schemaName), views.schema_front3),re_path(r{}/front/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)/(?Pp4.*)$.format(schemaName), views.schema_front4),# re_path(rassets/(?Pp1.*)$, views.assets1),# re_path(rassets/(?Pp1.*)/(?Pp2.*)$, views.assets2),# re_path(rassets/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)$, views.assets3),# re_path(rassets/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)/(?Pp4.*)$, views.assets4),#re_path(radmin/(?Pp1.*)$, views.admin_file1),re_path(radmin/(?Pp1.*)/(?Pp2.*)$, views.admin_file2),re_path(radmin/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)$, views.admin_file3),re_path(radmin/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)/(?Pp4.*)$, views.admin_file4),re_path(rlayui/(?Pp1.*)$, views.layui1),re_path(rlayui/(?Pp1.*)/(?Pp2.*)$, views.layui2),re_path(rlayui/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)$, views.layui3),re_path(rlayui/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)/(?Pp4.*)$, views.layui4),re_path(rpages/(?Pp1.*)$, views.front_pages),re_path(rpages/(?Pp1.*)/(?Pp2.*)$, views.front_pages2),# re_path(rpages/(?Pp1.*)$, views.front_file1),# re_path(r(?Pp1css|jss|img|image|iamges|font|fonts)/(?Pp2.*)$, views.front_file2),re_path(rmodules/(?Pp1.*)$, views.front_modules),re_path(rcss/(?Pp1.*)$, views.css1),re_path(rjs/(?Pp1.*)$, views.js1),re_path(rimg/(?Pp1.*)$, views.img1),path(rtest/str:p1/,views.test),path(rnull,views.null),
]#判断admin使用vue还是jquery
if os.path.isdir(os.path.join(os.getcwd(),templates/front/admin/dist/)):urlpatterns.extend([path(r{}/admin/dist/index.html.format(schemaName),TemplateView.as_view(template_namefront/admin/dist/index.html)),path(r{}/admin/.format(schemaName), TemplateView.as_view(template_namefront/admin/dist/index.html)),# 以下是后台admin的url匹配规则path(radmin/dist/index.html.format(schemaName),TemplateView.as_view(template_namefront/admin/dist/index.html)),path(radmin/, TemplateView.as_view(template_namefront/admin/dist/index.html)),])
else:urlpatterns.extend([path(r{}/admin/index.html.format(schemaName),TemplateView.as_view(template_namefront/admin/index.html)),path(r{}/admin/.format(schemaName), TemplateView.as_view(template_namefront/admin/index.html)),# 以下是后台admin的url匹配规则path(radmin/index.html.format(schemaName),TemplateView.as_view(template_namefront/admin/index.html)),path(radmin/, TemplateView.as_view(template_namefront/admin/index.html)),])if os.path.isfile(os.path.join(os.getcwd(),templates/front/index.html)):urlpatterns.extend([path(rindex.html, TemplateView.as_view(template_namefront/index.html)),path(r{}/index.html.format(schemaName), TemplateView.as_view(template_namefront/index.html)),path(r{}/front/index.html.format(schemaName), TemplateView.as_view(template_namefront/index.html)),path(r, TemplateView.as_view(template_namefront/index.html)),])5.3 Users_v.py
# coding:utf-8
__author__ ilafrom django.http import JsonResponsefrom .users_model import users
from util.codes import *
from util.auth import Auth
import util.message as mes
from dj2.settings import host,port,user,passwd,dbName,hasHadoopdef users_login(request):if request.method in [POST, GET]:msg {code: normal_code, msg: mes.normal_code}req_dict request.session.get(req_dict)if req_dict.get(role)!None:del req_dict[role]datas users.getbyparams(users, users, req_dict)if not datas:msg[code] password_error_codemsg[msg] mes.password_error_codereturn JsonResponse(msg)req_dict[id] datas[0].get(id)return Auth.authenticate(Auth, users, req_dict)def users_register(request):if request.method in [POST, GET]:msg {code: normal_code, msg: mes.normal_code}req_dict request.session.get(req_dict)error users.createbyreq(users, users, req_dict)if error ! None:msg[code] crud_error_codemsg[msg] errorreturn JsonResponse(msg)def users_session(request):if request.method in [POST, GET]:msg {code: normal_code,msg:mes.normal_code, data: {}}req_dict {id: request.session.get(params).get(id)}msg[data] users.getbyparams(users, users, req_dict)[0]return JsonResponse(msg)def users_logout(request):if request.method in [POST, GET]:msg {msg: 退出成功,code: 0}return JsonResponse(msg)def users_page(request):if request.method in [POST, GET]:msg {code: normal_code, msg: mes.normal_code,data: {currPage: 1, totalPage: 1, total: 1, pageSize: 10, list: []}}req_dict request.session.get(req_dict)tablename request.session.get(tablename)try:__hasMessage__ users.__hasMessage__except:__hasMessage__ Noneif __hasMessage__ and __hasMessage__ ! 否:if tablename ! users:req_dict[userid] request.session.get(params).get(id)if tablename users:msg[data][list], msg[data][currPage], msg[data][totalPage], msg[data][total], \msg[data][pageSize] users.page(users, users, req_dict)else:msg[data][list], msg[data][currPage], msg[data][totalPage], msg[data][total], \msg[data][pageSize] [],1,0,0,10return JsonResponse(msg)def users_info(request, id_):if request.method in [POST, GET]:msg {code: normal_code, msg: mes.normal_code, data: {}}data users.getbyid(users, users, int(id_))if len(data) 0:msg[data] data[0]# 浏览点击次数try:__browseClick__ users.__browseClick__except:__browseClick__ Noneif __browseClick__ and clicknum in users.getallcolumn(users, users):click_dict {id: int(id_), clicknum: str(int(data[0].get(clicknum, 0)) 1)}ret users.updatebyparams(users, users, click_dict)if ret ! None:msg[code] crud_error_codemsg[msg] retreturn JsonResponse(msg)def users_save(request):if request.method in [POST, GET]:msg {code: normal_code, msg: mes.normal_code, data: {}}req_dict request.session.get(req_dict)req_dict[role] 管理员error users.createbyreq(users, users, req_dict)if error ! None:msg[code] crud_error_codemsg[msg] errorreturn JsonResponse(msg)def users_update(request):if request.method in [POST, GET]:msg {code: normal_code, msg: mes.normal_code, data: {}}req_dict request.session.get(req_dict)if req_dict.get(mima) and req_dict.get(password):if mima not in users.getallcolumn(users,users):del req_dict[mima]if password not in users.getallcolumn(users,users):del req_dict[password]try:del req_dict[clicknum]except:passerror users.updatebyparams(users, users, req_dict)if error ! None:msg[code] crud_error_codemsg[msg] errorreturn JsonResponse(msg)def users_delete(request):if request.method in [POST, GET]:msg {code: normal_code, msg: mes.normal_code, data: {}}req_dict request.session.get(req_dict)error users.deletes(users,users,req_dict.get(ids))if error ! None:msg[code] crud_error_codemsg[msg] errorreturn JsonResponse(msg)5.4 Auth.py
# coding:utf-8
# author:ila
import base64, copy
from django.http import JsonResponse
from django.apps import appsfrom util.codes import *
from util import message as mesclass Auth(object):def authenticate(self, model, req_dict):用户登录登录成功返回token登录失败返回失败原因:param username:账号:param password:密码:return: jsonmsg {code: normal_code, msg: mes.normal_code, data: {}}tablename model.__tablename__encode_dict {tablename: tablename, params: req_dict}encode_str base64.b64encode(str(encode_dict).encode(utf-8))msg[data][id] req_dict.get(id)msg[id] req_dict.get(id)msg[token] encode_str.decode(utf-8)return JsonResponse(msg)def identify(self, request):用户鉴权:param request:本次请求对象:return: listmsg {code: normal_code, msg: mes.normal_code, data: {}}# django的header被处理过了token request.META.get(HTTP_TOKEN)if token and token !null:auth_token copy.deepcopy(token)decode_str base64.b64decode(auth_token).decode(utf8)decode_strdecode_str.replace(null,).replace(null,)decode_dict eval(decode_str)tablename2 decode_dict.get(tablename)params2 decode_dict.get(params,{})datasNoneallModels apps.get_app_config(main).get_models()for model in allModels:if model.__tablename__ tablename2:datas model.getbyparams(model, model, params2)if not datas:msg[code] username_error_codemsg[msg] 找不到该用户信息result msgelse:request.session[tablename] tablename2request.session[params] params2msg[msg] 身份验证通过。result msgelse:msg[code] 401msg[msg] headers未包含认证信息。result msgreturn result6.LW文档大纲参考 具体LW如何写法可以咨询博主耐心分享 你可能还有感兴趣的项目 更多项目推荐:计算机毕业设计项目 Python毕业设计精品项目《1000套》 微信小程序毕业设计精品项目《1000套》 大数据/机器学习毕业设计精品项目《1000套》 如果大家有任何疑虑请在下方咨询或评论