Nine CMS是一款用于管理内容的Django应用程序。

django-ninecms的Python项目详细描述


===
nine cms
=



ninecms是一款管理内容的django应用程序。用户可以创建内容并将其发布到路径。

…图片::https://img.shields.io/travis/wtower/django ninecms/devel.svg
:目标:https://travis ci.org/wtower/django ninecms

…图片::https://img.shields.io/covertalls/wtower/django ninecms/devel.svg
:目标:https://covertalls.io/github/wtower/django ninecms

。图片::https://img.shields.io/pypi/v/django ninecms.svg
:目标:https://pypi.python.org/pypi/django ninecms
:alt:最新的pypi版本

…图片::https://img.shields.io/pypi/dm/django ninecms.svg
:目标:https://pypi.python.org/pypi/django ninecms
:alt:每月pypi下载数


管理员屏幕截图:

。图片::https://raw.githubusercontent.com/wtower/django ninecms/master/docs/screenshots/index1.png





objectives
--



对于其他语言(如php)来说,已经建立的cms非常重要。
django可以很容易地在很短的时间内用于构建异国情调的web应用程序,
因此django通常不需要另一个重量级的cms。
九个cms旨在为si提供一个公分母。在构建django应用程序或小型站点时提供简单的内容。

总而言之:

-轻量级
-易于启动和自定义项目
-受drupal节点模型架构的启发
-显然在python上使用django web框架
-质量:讨厌的bug;还测试覆盖率是100%

功能
——

-节点建模灵感来自于drupal节点,功能:

-动态内容(显然)呈现为节点
-修改系统
-国际化(i18n)从头开始
-可以自动生成的url别名基于提供的模式进行更新
-可在不同模板或视图中使用的页面类型(如下)
-每页类型权限
-清理HTML

-内容块
-菜单
-媒体管理

-图像、视频、文件
-图像样式

-视图(需要提供上下文的分离信号)
-分类法(术语)
-联系方式
-带仪表板的管理界面
-实用程序

-字符转换
-自定义标记
-基本搜索功能

-引导



需要以下内容:

-python(3.4+)
-django(1.7+,建议1.9):web framework
-django guardian(1.4+):提供每页类型的权限
-django mptt(0.8+):为标签和菜单提供树
-漂白剂(1.4+):漂白剂消毒用户html
-枕头(3+):cr为用户映像创建不同的大小
-pytz(2015+):处理用户时区

在9cms中
-django-bootstrap3:改进管理字段
-django调试工具栏:有明显原因
-mysqlclient:或任何其他db连接器
-newrelic:或任何其他监视工具
-python3 memcached:用于内存缓存

django 1.9注意:

-getting``removedindjango110warning:render()必须用dict而不是context来调用。``到几个地方。
许多其他应用程序都会收到类似的警告。在不触犯django<;1.9的情况下寻找解决方案。


新项目指南
----

这是创建新项目的完整指南。*很快将添加一个快速指南*

还有一个项目可以用作
`Django 9CMS网站样板<;http://www.github.com/wtower/django NineCMS Starter&Gt;`.

1.创建一个新项目

如果不存在,则创建一个新项目,并可选(作为提醒):

-创建新的virtualenv
-初始化git和初始提交

2。依赖项

-将以下内容添加到"requirements.txt"文件中::

django ninecms>;=0.5.4

-以及可选的:

coverage~=4.0.3
django admin bootstrapped~=2.5.6
django admin bootstrapped plus>;。=0.1.1
django-bootstrap3~=7.0.1
django调试工具栏~=1.4.0
mysqlclient~=1.3.7
newrelic~=2.60.0.46
python3 memcached~=1.51
sqlparse~=0.1.18

-然后运行::

$pip install-r requirements.txt

-downl为管理员中的富文本字段加载ckeditor(可选):

-从http://ckeditor.com/builder下载
-提取"static/ninecms/ckeditor"下的文件,使"ckeditor.js"位于此目录中
-建议将"build config.js"文件捆绑在上述目录中ory
-注意:django ckeditor包也需要类似的操作,因此不使用它。

3。设置

ninecms/settings.py中也存在所有相关设置示例作为注释。
从下面的代码示例中删除任何设置,这些设置指的是未按上述方式安装的可选软件包。

-``已安装的应用程序``设置:


已安装的应用程序=(
"ADMIN_bootstrapped_plus"、
"django_admin_bootstrapped"、
"django.contrib.admin"、
"django.contrib.auth"、
"django.contrib.contenttypes"、
"django.contrib.sessions"、
"django.contrib.messages"、
"django.contrib.messages"django.contrib.staticfiles',
"mptt",
"调试工具栏",
"守护者",
"ninecms",
"…
")


-中间件::

中间件类=(
"django.middleware.cache.updatecachemiddleware",
"django.contrib.sessions.middleware.sessionmiddleware","django.middleware.locale.localemidleware","django.middleware.common.commonmiddleware","django.middleware.cache.fetchfromcachemidleware","django.middleware.csrf"。csrfviewMiddleware',
"django.contrib.auth.middleware.authenticationMiddleware",
"django.contrib.auth.middleware.sessionAuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.xfram"eoptionsMiddleware,
"django.middleware.security.securityMiddleware",


-templates

添加"调试":true``仅当计划为项目创建单独的实时设置文件时::

templates=[
{
"后端':'django.template.backends.django.django templates',
'dirs':[
os.path.join(base-dir,'templates'),
],
'app-dirs':true,
'选项':{
'上下文处理器':[
'django.template.context庠processors.debug',
'django.template.context庠processors.request',
'django.contrib.auth.context庠processors.auth',
'django.contrib.messages.context庠processors.messages',
],
"调试":真的,
},
},
]


-语言::




时区="欧洲/雅典"或其他=true
use_l10n=true
use_tz=true

-静态和媒体::


staticfiles_dirs=(
os.path.join(base_dir,"static"),

media_root=os.path.join(base_dir,"media")
media_url='/media/'

-错误报告:

管理员=(
("网站管理员","web@9-dev.com"),

经理=(
("网站管理员","web@9-dev.com"),

电子邮件主机='mail.9-dev.com'
电子邮件主机用户='do not reply@9-dev.com'
email host戋u password='
email戋u use戋ssl=true
email戋port=465
email戋u subject戋u prefix='[9cms]'
server戋email='不要回复@9-dev.com'
-安全性:

登录url='/admin/login/'
secure_content_type_nosniff=true
secure_browser_xss_filter=true
x_frame_options='拒绝'
csrf_cookie_httponly=true
session_cookie name='myapp_sessionid'

-缓存::

caches={
'默认值':{
'后端':'django.core.cache.backends.dummy.dummycache',
}
}
}
cache中间件秒数=3*60*60或任何

-守护者::


身份验证后端=(
'django.contrib.auth.backends.modelbackend',这是默认值
"guardian.backends.objectpermissionbackend",

匿名用户ID=-1

-django管理员::

dab\u字段渲染器='django\u管理员引导。渲染器。bootstrapfieldenderer'

from django.contrib导入消息
消息标记={
消息。成功:'alert success',
消息。警告:'alert warning warning',
消息。错误:'alert danger error'
}

-cms设置::

s.settings import*
site_name="…"
site_author="…"
site_keywords="…"
i18n_url=true false

-可选的测试设置(单独的文件,例如"settings_test.py`)::

从myapp.settings import*
调试=true
密码哈希器=(
'django.contrib.auth.hashers.md5passwordhasher',

模板=[
{
'backend':'django.template.backends.django.django templates',
'dirs':[\disable overriden templates
],
"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',
],
'debug':true,
},
},
]
databases={
'default':{
"引擎":"django.db.backends.sqlite3",
"名称":os.path.join(base-dir,'db.sqlite3'),
}
}
languages=(至少2
('el','greek'),
('en','english'),
)imagetyles.update({
‘thumbnail upscale’:{
‘type’:‘thumbnail upscale’,
‘size’:(150,150)
},
})


-live的可选设置(单独的文件,例如``settings\u live.py``)::

从myapp导入设置*
debug=false
允许的_主机=[

]
模板=[
{
"后端":"django.template.backends.django.django templates",
"目录":[
os.path.join(基目录,"模板"),
],
"应用目录":true,
"选项":{
'上下文处理器':[
'django.template.context庠processors.debug',
'django.template.context庠processors.request',
'django.contrib.auth.context庠processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
ache',
"位置":"127.0.0.1:11211",
"超时":3*60*60,或任何
"密钥前缀":"myapp",
"版本":1,
}
}
}


4。在项目根目录中创建空文件夹:

-``/static/`
-``/media/``

-*可选*将图像从
https://github.com/wtower/django-ninecms-starter/tree/master/media/ninecms/basic/image复制到
`/media/ninecms/basic/image``如果要运行NineCMS测试(见下文)。

5.运行`./manage.py migrate``创建模型。

6。url配置

-包括admin、i18n和9cms的url配置
-确保9cms url conf是最后一行,以便动态路由器捕获所有url。
-包括``robots.txt`
-包括本地服务器的静态文件

url示例:om django.conf import settings
from django.conf.urls import include,url
from django.conf.urls.i18n import i18n_patterns
from django.conf.urls.static import static
from django.contrib import admin
from django.views.generic import templateview

urlpatterns=[
url(r'^admin/',include(admin.site.urls)),
url(r'^i18n/',include('django.conf.urls.i18n'),
url(r'^robots\.txt/$',template view.as(template''ninecms/robots.txt',content''type''text/plain'),
]

(图像、css、javascript等)
如果设置。调试:
urlpatterns+=静态(settings.media戋url,document戋root=settings.media戋root)戋pragma:no cover

last:all remaining pass to cms
如果设置。i18n戋url:戋pragma:nocover
urlpatterns+=i18n嫒u模式(
url(r'^',include('ninecms.urls',namespace='ninecms')),

其他:嫒pragma:nocover
url patterns+=[
url(r'^',include('ninecms.urls',namespace='ninecms'),
]


7。启动开发服务器并访问http://127.0.0.1:8000/admin/

访问http://127.0.0.1:8000/查看内容。

>9。或者使用"python manage.py test--settings=myapp.settings\u test ninecms```运行测试。


>;从这里开始,常见任务包括:

-theming(见下文)
-添加页面类型
-添加内容
-添加菜单
-添加块

直截了当。除了开发自定义主题之外,还可以很容易地使用Web上无数可用主题中的任何现成的HTML主题。

*(v0.6.0中的更改)*

基类声明文档类型(html5),
加载脚本,所有脚本都在块中定义。

索引文件是最可能需要重写的文件。你可以检查底座,看看出现以下块。这些是按外观顺序定义的:

-``meta`:在``<;head>;````中定义任何自定义关键字。
根据设置和显示的节点(页)生成一些默认值。
-``head`:在`<;head>;``底部定义任何其他元素。
con和其他样式表/头脚本。
-``body_attrs``:定义要附加到`<;body>;````的任何其他属性。
默认值是``class``仅。
-``body_top``:指向页面顶部的小链接。默认情况下,一个小的javascript使用它在向下滚动之后在页面的右下角显示一个小的固定顶部链接。如果不重写,
那么您可能需要为"toplink"添加一个"static/ninecms/images/toplink.png"背景或自定义css。
-"body"loader`:定义了一个方便的页面加载程序(启动屏幕)。
重写,如果不合适,留空。
-"content`:这是main需要在索引中重写的内容块。
-`` body_bottom`:页面底部的一个不可见的小链接。
-`` body_scripts``:在`<;body>;``底部定义任何其他内容。
此处添加要在文档末尾加载的其他脚本。

索引文件是使用的默认模板,但可以扩展为在页面类型中使用
(请参见下面的主题建议)。

clude%}`或者可以直接复制到自定义模板中。

ninecms根据模板文件名为页面类型选择模板
,顺序如下:

-``页面[页面类型.名称]``
-`[页面类型.名称]``
-``索引.html`

,其中``[页面类型.名称]``是页面类型的计算机名称,
例如,如果页面类型名称是'basic page则是"basic_page"。

在ninecms中,除了逻辑地将内容组织到相关的页面类型(也可以使用分类术语)之外,每种页面类型都可以具有不同的页面布局,
具有不同的块。

类似于y的模型,
例如在drupal中。不打算添加这样的功能,因为django模型可以很容易地添加到代码中并扩展cms功能。


url别名
----


>每个内容类型下的节点都可以有一个预先指定的默认url别名。如果该页类型的节点未指定url别名,则将使用默认值。

``:节点创建的日期。
-`[节点:已更改:格式]`:上次节点更新的日期。
-格式可以是
``(说明符)(分隔符)(分隔符)(说明符)(说明符)(分隔符)(说明符)``格式中的任何"php日期格式"说明符,例如``d-m-y`.

。_ php日期格式:http://www.php.net/date

block types
----


链接到菜单项的菜单或子菜单。
-``signal`:调用特定于站点的自定义视图呈现(请参阅下面的视图)。
-``language`:呈现语言切换菜单。
-``user menu`:呈现具有登录/注销或注册链接的用户菜单。
-``log在``:呈现登录表单。
-``搜索`:呈现搜索表单。
-``搜索结果`:呈现搜索结果。简单的搜索功能。对于高级搜索,需要使用适当的包
。对于搜索结果页,添加新的页类型并实现块。不区分大小写的
无法在sqlite中执行搜索(另请参见下面的要点)。
-``contact`:呈现联系人表单。

views
----


s.py``关于如何对信号进行编码的文件。


权限摘要
----


这是所有适用权限的摘要:

-django admin:

-user:is staff(访问管理员)
-user:is superuser(小心)

-无条件访问所有位置
-节点的其他字段
-仪表板
-仪表板上的实用程序

-用户:添加、更改、删除
-组:添加、更改、删除
-权限:添加、更改、删除

-监护人:

-用户对象权限:添加、更改、删除
-组对象权限:添加、更改、删除

-9cms:

ns:add,change,delete
-节点:可以使用完整的html
-节点:view unpublished
-每个内容类型的组权限(由guardian提供,可通过"页面类型"更改列表管理页访问)


组权限配置示例:

-节点:view unpublished
-节点:add
-节点:change
-图片:添加、更改、删除
-页面类型特定权限:添加、更改

我很感动,因为已经有好几种可用的方法了。

ninecms的扩展很快就可以解决这个问题。或者,"django bower"是好的。

可以在"ninecms/settings.py"中找到一些预定义的样式。
可以使用项目的"settings.py"中的"image\u style s"来扩展或替换这些样式。
这是一个字典,其中索引是定义的样式名,其值是一个带有索引"type"和"value"的字典。例如::

image_styles.update({'my_style':{'type':'thumbnail','size':(120,100)})

提供的维度的比率及其缩放比例。

他的事。
为了使用图像样式,必须将其安装在服务器上。当第一次请求特定图像的图像样式时,ninecms使用imagemagick在
初始文件路径中的新目录中创建一个新文件,文件名为该样式。要刷新此文件缓存,只需使用
样式名删除目录。小心不要取出原始文件。

枕头尚未使用,因为当时它与蟒蛇3有多个问题。如果大型memcache或redis可用,那么对于高流量网站来说,`sorl thumbnail<;https://github.com/mariocesar/sorl thumbnail>;``可能是一个更好的解决方案s.

要点
----

-如果i18n URL:内部页面的菜单项应始终具有语言[v0.3.1a]
-搜索页面需要页面类型中的搜索结果块和"搜索"别名,不需要sqlite[v0.4.4b]
-在设置中添加语言18N_u网址[v0.4.7b]


footnote
——


对本项目的任何贡献都非常感谢,我们将尽最大努力予以回应。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java访问私有字段而不使用getter方法?   使用PowerMockito在JavaEWSAPI中模拟测试拉订阅   启动活动时未保存java首选项并清除变量   java如何在servlet中检索子域?斯普林有帮手吗   java使用Docker从命令行构建Android项目   java Android,ActionBar后退按钮(setDisplayHomeAsUpEnabled(true))重新创建父活动   java在重用FileOutputStream时应该关闭流吗?   java使用RESTAPI将文件上载到s3 bucket   Java SOAP Web服务应用程序中的mysql用户登录方法不工作   java使用多个数字计算百分比并转换为长   java Android SQLiteDatabase查询忽略空格   java如何在Javafx中比较两个字段文本   java错误:未设置java_HOME,在Eclipse安装后找不到   java在安卓中保存对象   java如何使用jaxws从返回List<Object>的服务中检索值   java Google OAuth2 JWT令牌验证异常   SpringMVC中的JavaUTF8编码问题,当从JSP表单发送POST请求中的越南语信件时   java从webview重定向到安卓应用程序   JUnit 5中多个扩展的java顺序