Django项目骨架与常见配置修改
目录
- 命令
- 整体架构
- settings.py文件配置项
- 默认配置修改
- xadmin 3 使用
- 富文本编辑器Ueditor使用
- django-pure-pagination使用
- Django 3.0.8 自定义错误界面
- Django 电子书
命令
django-admin startproject XX # 创建项目
python manage.py startapp XX # 创建应用
python manage.py shell # shell,进入当前项目环境
python mange.py runserver # 启动内置的服务器运行当前的项目
python manage.py makemigrations # 生成迁移文件(数据表的Schema)
python manage.py migrate # 数据库迁移
python manage.py createsuperuser #创建超级用户(后台登录)python mange.py test # 运行功能测试和单元测试,功能测试需要自己创建文件
python mange.py test xx # 运行指定目录下的测试python manage.py collectstatic # 把 static 目录中的文件复制到 STATIC_ROOT 中设置的文件pip freeze > requirements.txt # 生成环境依赖文件
pip install -r requirements.txt # 重建项目依赖环境
整体架构
- bbs是项目中的Python包名称,即导入Python包所使用的名称。
- _init_.py文件用于标识当前所在的目录是一个Python包。
- settings.py是Django项目的配置文件。
- urls.py文件用于记录Django项目的URL映射关系。
- wsgi.py是WSGI服务器程序的入口文件,用于启动应用程序。
- manage.py是用于管理Django项目的命令行工具。
settings.py文件配置项
# 定义的是bbs所在的完整路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# 加密盐,用于对各种需要加密的数据做Hash处理
SECRET_KEY = 'y(ejirhf&()-7=n3*+3v7qe6!o0z2xky2b!g6b7j89v_e1)&=b'# 开发时设为True,暴露更多信息
DEBUG = True# 用于配置可以访问当前站点的域名,当DEBUG配置为False时,它是一个必填项,设置ALLOWED_HOSTS=['*']允许所有的域名访问
ALLOWED_HOSTS = []# 当前项目需要加载的App包路径列表
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',
]# 项目中需要加载的中间件列表配置
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',
]# 当前项目的根URL配置,是Django路由系统的入口点
ROOT_URLCONF = 'bbs.urls'# 项目的模板配置
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [],'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 = 'bbs.wsgi.application'# 数据库配置
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}# 一些支持插拔的密码验证器,避免直接通过用户的弱密码配置申请
AUTH_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',},
]# 项目的语言环境和时区
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'# 国际化和本地化
USE_I18N = True
USE_L10N = True# 标识对于时区的处理,如果设置为True,不论TIME_ZONE设置的是什么,存储到数据库中的时间都是UTC时间
USE_TZ = True# 静态资源的存放位置
STATIC_URL = '/static/'
默认配置修改
- 中文语言环境和时区
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False
- 创建多个app到同一个文件夹
- 手动创建
1)在根目录下新建apps
来统一放所有的app
mkdir apps && cd apps
- 在
apps
中新建一个文件夹,文件夹名字就是想生成app
的名字
mkdir demo
- 用命令生成
demo
django-admin startapp demo demo
# 或者
python manage.py startapp demo apps/demo
- pycharm拖拽
在pycharm
中,直接将已经生成的app
拖到apps
中,这时会弹出对话框提示,取消勾选Search for references
,然后右键apps
文件夹——mark directory as
——sources root
最后,不要忘记在settings.py
中添加路径
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
- 重载系统用户
settings中配置
# 重载系统的用户,让UserProfile生效
AUTH_USER_MODEL = 'users.UserProfile'
在 user 应用中自定义 UserProfile 模型
from datetime import datetime
from django.db import models
from django.contrib.auth.models import AbstractUserclass UserProfile(AbstractUser):""""用户信息"""GENDER_CHOICES = (("male", u"男"),("female", u"女"))# 用户用手机注册,姓名,生日和邮箱可以为空name = models.CharField("姓名", max_length=30, null=True, blank=True)birthday = models.DateField("出生年月", null=True, blank=True)gender = models.CharField("性别", max_length=6, choices=GENDER_CHOICES, default="female")mobile = models.CharField("电话", max_length=11)email = models.EmailField("邮箱", max_length=100, null=True, blank=True)class Meta:verbose_name = "用户信息"verbose_name_plural = verbose_namedef __str__(self):return self.username
- 修改app名字,后台显示为中文
修改app/apps.py
文件,这里是 users app
from django.apps import AppConfigclass UsersConfig(AppConfig):name = 'users'#app名字后台显示中文verbose_name = "用户管理"
再在__init__.py
中修改默认配置
default_app_config = 'users.apps.UsersConfig'
xadmin 3 使用
1)下载
git clone git@gitee.com:TomatoChewgum/xadmin_django3.x.gitcd xadmin_django3/git branch -agit checkout remotes/origin/django3
2)整合
在自己项目新建 extra_apps
文件夹,把源码xadmin文件夹放到extra_apps
文件夹下面。
把extra_apps右键mark为Source Root并在settings中加入
sys.path.insert(0,os.path.join(BASE_DIR, 'extra_apps'))
3)配置路由
把项目依赖的admin改成xadmin
# urls.py
from django.urls import path
import xadminurlpatterns = [path('xadmin/', xadmin.site.urls),
]
- 注册app
将xadmin
和crispy_forms
注册到settings.py的INSTALLED_APPS中
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','xadmin','crispy_forms',
]
5)安装包
pip install -r requirements.txt
#或者
conda install --yes --file requirements.txt
6)使用
迁移数据库后
python manage.py makemigrations
python manage.py migrate
创建管理员用户python manage.py createsuperuser
,运行python manage.py runserver
,访问地址http://127.0.0.1:8000/xadmin
,就可以看到后台记录了。
- django —下载并安装xadmin(django3.x + python3.6)
富文本编辑器Ueditor使用
1.下载 https://github.com/twz915/DjangoUeditor3/,解压后放到extra_apps
目录下面
2. 注册app
INSTALLED_APPS = ['DjangoUeditor',
]
- 路由配置
# 富文本编辑器urlpath('ueditor/',include('DjangoUeditor.urls' )),
- Django3.0.3移除了six,urllib也独立了,修改它们的引入方式
- 将DjangoUEditor目录下的
views.py
文件中的
from django.utils.six.moves.urllib.request import urlopen
from django.utils.six.moves.urllib.parse import urljoin
改成
from six.moves.urllib.request import urlopen
from six.moves.urllib.parse import urljoin
- 将DjangoUEditor目录下的
widgets.py
文件中的
from django.utils.six import string_types
改成
from six import string_types
- 将DjangoUEditor目录下的
commands.py
文件中的
from django.utils.six.moves.urllib.parse import urljoin
改成
from urllib.parse import urljoin
- xadmin 集成 UEditor
- 在 xadmin/plugs 目录下新建ueditor.py文件,代码如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-import xadmin
from xadmin.views import BaseAdminPlugin, CreateAdminView, ModelFormAdminView, UpdateAdminView
from DjangoUeditor.models import UEditorField
from DjangoUeditor.widgets import UEditorWidget
from django.conf import settingsclass XadminUEditorWidget(UEditorWidget):def __init__(self, **kwargs):self.ueditor_options = kwargsself.Media.js = Nonesuper(XadminUEditorWidget, self).__init__(kwargs)class UeditorPlugin(BaseAdminPlugin):def get_field_style(self, attrs, db_field, style, **kwargs):if style == 'ueditor':if isinstance(db_field, UEditorField):widget = db_field.formfield().widgetparam = {}param.update(widget.ueditor_settings)param.update(widget.attrs)return {'widget': XadminUEditorWidget(**param)}return attrsdef block_extrahead(self, context, nodes):js = '<script type="text/javascript" src="%s">;</script>;' % (settings.STATIC_URL + "ueditor/ueditor.config.js") # 自己的静态目录js += '<script type="text/javascript" src="%s">;</script>;' % (settings.STATIC_URL + "ueditor/ueditor.all.min.js") # 自己的静态目录nodes.append(js)xadmin.site.register_plugin(UeditorPlugin, UpdateAdminView)
xadmin.site.register_plugin(UeditorPlugin, CreateAdminView)
- 在 xadmin/plugs/_init_.py里面添加ueditor插件
PLUGINS = ('ueditor',
)
- xadmin 集成ueditor 会出现render错误 找到UEditor/widgets.py,修改如下代码
def render(self, name, value, attrs=None):
# 修改为
def render(self, name, value, attrs=None, renderer=None):
- 使用UEditorField字段
from DjangoUeditor.models import UEditorFieldgoods_desc = UEditorField(verbose_name=u"内容", imagePath="goods/images/", width=1000, height=300,filePath="goods/files/", default='')
- 效果
django-pure-pagination使用
- 安装
pip install django-pure-pagination
- settings.py 配置
#注册pure_pagination
INSTALLED_APPS = [....... 'pure_pagination',
]#追加pure_pagination配置代码
PAGINATION_SETTINGS={'PAGE_RANGE_DISPLAYED':10, # 主分页页面显示几个'MARGIN_PAGES_DISPLAYED':2, #省略号前面显示几个'SHOW_FIRST_PAGE_WHEN_INVALID':True,
}
- 修改源码
打开paginator.py文件,添加如下代码
def __iter__(self):for i in self.object_list:yield i
- views中使用方法
class OrgView(View):"""课程机构"""def get(self, request):all_orgs = CourseOrg.objects.all()org_nums = all_orgs.count()all_citys = CityDict.objects.all()# 对课程机构进行分页# 尝试获取前台get请求传递过来的page参数# 如果是不合法的配置参数默认返回第一页try:page = request.GET.get('page', 1)except PageNotAnInteger:page = 1# 从all_org中取五个出来,每页显示5个p = Paginator(all_orgs, 5, request=request)orgs = p.page(page)return render(request, "./org/org-list.html", {"all_orgs": orgs,"all_citys": all_citys,"org_nums": org_nums,})
- 分页功能
使用object_list
分页
<div class="pageturn"><ul class="pagelist">{% if all_orgs.has_previous %}<li class="long"><a href="?{{ all_orgs.previous_page_number.querystring }}">上一页</a></li>{% endif %}{% for page in all_orgs.pages %}{% if page %}{% ifequal page all_orgs.number %}<li class="active"><a href="?{{ page.querystring }}">{{ page }}</a></li>{% else %}<li><a href="?{{ page.querystring }}" class="page">{{ page }}</a></li>{% endifequal %}{% else %}<li class="none"><a href="">...</a></li>{% endif %}{% endfor %}{% if all_orgs.has_next %}<li class="long"><a href="?{{ all_orgs.next_page_number.querystring }}">下一页</a></li>{% endif %}</ul>
</div>
Django 3.0.8 自定义错误界面
- 修改项目settings.py
DEBUG = FalseALLOWED_HOSTS = ['*']
- views.py添加内容
from django.shortcuts import renderdef bad_request(request, exception, template_name='400.html'):return render(request, template_name)def permission_denied(request, exception, template_name='403.html'):return render(request, template_name)def page_not_found(request, exception, template_name='404.html'):return render(request, template_name)# 注意这里没有 exception 参数
def server_error(request, template_name='500.html'):return render(request, template_name)
- urls.py 添加内容
handler400 = views.bad_request
handler403 = views.permission_denied
handler404 = views.page_not_found
handler500 = views.server_error
特别注意,server_error
没有 exception
参数
Django 电子书
https://www.aliyundrive.com/s/F6YManamqyG
Django项目骨架与常见配置修改相关推荐
- django项目实战(2)-数据库配置
2019独角兽企业重金招聘Python工程师标准>>> 项目创建完成后,我们需要配置数据库了,虽然我们在创建项目的时候选择了mysql数据库,但是我们还要安装MySQL_python ...
- Scrapy Django项目
需求: 编写爬虫项目与Django项目详解和, 将爬取到的数据展示到前端页面上 # spider编写: import scrapy from dl.items import DlItem class ...
- (转)Maven之自定义archetype生成项目骨架
背景:最近在开发一个项目的基础构件,在以后项目的开发过程中可以直接使用该构件快速的生成项目骨架进行开发. 摘要:使用过Maven的人都知道maven中有许多功能都是通过插件来提供的,今天我们来说一下其 ...
- Maven之自定义archetype生成项目骨架(一)
摘要:使用过Maven的人都知道maven中有许多功能都是通过插件来提供的,今天我们来说一下其中的一个插件:maven-archetype-plugin ,通过该插件可以自定义符合我们自己需求的arc ...
- Django讲课笔记04:Django项目的调试
文章目录 零.本讲学习目标 一.课程导入 二.新课讲授 (一)PyCharm运行命令创建的Django项目 1.打开第03讲里的MyDjango项目 2.配置Django Server 3.通过工具栏 ...
- Python框架篇之Django(Django项目搭建全过程、Web框架与Django)
文章目录 一.Web框架与Django本质 二.从安装到实现一个完整的Django项目 一.Web框架与Django本质 1.Web框架的理解 框架,特指为解决一个开放性问题而设计的具有一定约束性的支 ...
- django项目实现第三方github登录
OAuth(开放授权 Open Authorization)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容 ...
- 从零开始创建react+Django项目
环境准备 react项目的环境准备和配置参考(后面会需要修改react项目的一些配置,建议先了解): https://blog.csdn.net/sysukehan/article/details/1 ...
- 超详细Windows环境下使用Apache部署Django项目教程
目录 超详细Windows环境下使用Apache部署Django项目教程 1.什么是Apache 2.安装并配置Apache 2.1 下载Apache 2.2 解压Apache到文件夹 2.3 配置c ...
最新文章
- Juniper SSG 防火墙安全防护之拒绝服务×××[新任帮主]
- pdfbox 按章节读取_2020年知到设施园艺学第十单元章节测试答案
- 程序员基本功01数组与内存控制
- “加薪”“洗手间”都不能提?亚马逊内部员工通讯 App 曝光!
- C++ 前向声明(转载)
- mysql查询报错2014_MySQL错误2014的原因其他未缓冲的查询处于活动状态时无法执行查询...
- VPX,CompactPCI serial 总线
- 6. lcd驱动1-硬件原理
- iPad及BT4下的WEP破解实验与分析 | Network Security
- 大厂职级、薪资一览表,你处在哪一级?(BAT/TMD/华为)
- Kubernetes初探
- AMQ中Acknowledge那些事
- 11种QQ技术 ,让你成为QQ高手
- FUSE引起的SIGBUS问题分析报告
- 按键精灵 对文本的读取与 写入
- 6 生僻字_又双叒叕,火炎焱燚......神曲《生僻字》原唱来了!
- 自律自学,越努力越幸运
- 嵌入式课程设计linux,嵌入式系统课程设计--基于U盘的linux操作系统的构建
- CUIT智能车竞赛总结
- 企业文控管理系统与ERP/CRM/OA等管理信息系统的集成
热门文章
- Java 本地内存 直接内存 元空间
- 让360浏览器强制优先使用极速模式
- python pyqt5 股票分时_pythonpyqt5股票分时:股票风险与提示_XAC配资之家
- veracrypt取消加密卷_VeraCrypt如何创建文件型加密卷?保护文件资料安全
- 如何用火狐浏览器firefox模拟手机浏览器客户端
- 聪明人做生意,打折也能玩出新鲜感!让顾客觉得现在不买就是亏!
- ​PDF文件怎么转换成JPG图片?分享两种简单的转换方法
- SDN控制器工作原理—Vecloud
- 开会没带纸和笔?按下手机这个按钮,一键完成会议纪要
- 详解二叉排序树及其基本操作