Anaconda+django写出第一个web app(三)

前面我们已经建立了模型Tutorial,也已经可以用Navicat Premium打开数据看查看数据,接下来我们通过建立admin账户来上传数据。

在命令行执行如下命令来创建用户:

python manage.py createsuperuser

然后输入相应的用户名、邮箱和密码,邮箱可随意填写,接下来执行 python manage.py runserver ,在浏览器输入 http://127.0.0.1:8000/admin/看到下图,输入刚才创建的用户名和密码:

我们可以在User中看到刚才创建的用户名等信息。但是如何看到我们创建的Tutorial呢?我们需要在admin.py中注册他,修改main文件夹下的admin.py文件如下:

from django.contrib import admin
from .models import Tutorial
# Register your models here.
admin.site.register(Tutorial)

再次到浏览器刷新页面,即可看到Tutorial,点击进去也可看到其中的具体内容:

我们可以添加、编辑和删除相应的内容。我们还可以自己设置Tutorial这个模型中的变量显示顺序,变量是否显示以及分组显示等等。在admin.py中做出如下修改:

#修改显示顺序
from django.contrib import admin
from .models import Tutorial
# Register your models here.
class TutorialAdmin(admin.ModelAdmin):
    fields = [‘tutorial_title‘,
            ‘tutorial_published‘,
            ‘tutorial_content‘]

admin.site.register(Tutorial, TutorialAdmin)
#建立分组显示
from django.contrib import admin
from .models import Tutorial
# Register your models here.
class TutorialAdmin(admin.ModelAdmin):
    fieldsets = [
            ("Title/Date", {‘fields‘:[‘tutorial_title‘,‘tutorial_published‘]}),
            ("Content", {‘fields‘:[‘tutorial_content‘]})
                ]

admin.site.register(Tutorial, TutorialAdmin)

分组显示效果如下图:

帮助文档 [2]中对fieldsets的解释如下:

ModelAdmin.fieldsets

Set fieldsets to control the layout of admin “add” and “change” pages.

fieldsets is a list of two-tuples, in which each two-tuple represents a <fieldset> on the admin form page. (A <fieldset> is a “section” of the form.)

The two-tuples are in the format (name, field_options), where name is a string representing the title of the fieldset and field_options is a dictionary of information about the fieldset, including a list of fields to be displayed in it.

对于日期,我们希望每次新建一个tutorial时可以自动填充当前日期,其实就是给tutorial_published添加一个默认值,使其等于当前时间,修改models.py如下:

from django.db import models
from django.utils import timezone

# Create your models here.
class Tutorial(models.Model):
    tutorial_title = models.CharField(max_length=200)
    tutorial_content = models.TextField()
    tutorial_published = models.DateTimeField(‘date published‘, default=timezone.now())

    def __str__(self):
        return self.tutorial_title

我们在浏览器新建一个tutorial,可以看到日期自动填充为当前日期:

接下来我们将富文本编辑器TinyMce添加到tutorial_content这里来。在Anaconda Prompt中执行 conda install django-tinymce4-lite ,TineMce也是一个app,我们需要将其安装。在settings.py中修改INSTALLED_APPS,添加tinymce:

INSTALLED_APPS = [
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘main.apps.MainConfig‘,
    ‘tinymce‘,
]

还需要在settings.py中添加如下内容,这段代码放在INSTALLED_APPS前面即可,也可自行对这段代码进行编辑,具体查看相关帮助文档 [3]:

TINYMCE_DEFAULT_CONFIG = {
    ‘height‘: 360,
    ‘width‘: 1000,
    ‘cleanup_on_startup‘: True,
    ‘custom_undo_redo_levels‘: 20,
    ‘selector‘: ‘textarea‘,
    ‘theme‘: ‘modern‘,
    ‘plugins‘: ‘‘‘
            textcolor save link image media preview codesample contextmenu
            table code lists fullscreen  insertdatetime  nonbreaking
            contextmenu directionality searchreplace wordcount visualblocks
            visualchars code fullscreen autolink lists  charmap print  hr
            anchor pagebreak
            ‘‘‘,
    ‘toolbar1‘: ‘‘‘
            fullscreen preview bold italic underline | fontselect,
            fontsizeselect  | forecolor backcolor | alignleft alignright |
            aligncenter alignjustify | indent outdent | bullist numlist table |
            | link image media | codesample |
            ‘‘‘,
    ‘toolbar2‘: ‘‘‘
            visualblocks visualchars |
            charmap hr pagebreak nonbreaking anchor |  code |
            ‘‘‘,
    ‘contextmenu‘: ‘formats | link image‘,
    ‘menubar‘: True,
    ‘statusbar‘: True,
    }

现在我们需要在mysite文件夹下的urls.py中设置指向这个app。

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path(‘‘, include(‘main.urls‘)),
    path(‘admin/‘, admin.site.urls),
    path(‘tinymce/‘, include(‘tinymce.urls‘))
]

然后修改admin.py,使得tutorial_content显示这个控件,注意tinymce的大小写。

from django.contrib import admin
from .models import Tutorial
from tinymce.widgets import TinyMCE
from django.db import models
# Register your models here.
class TutorialAdmin(admin.ModelAdmin):
    fieldsets = [
            ("Title/Date", {‘fields‘:[‘tutorial_title‘,    ‘tutorial_published‘]}),
            ("Content", {‘fields‘:[‘tutorial_content‘]})
                ]
    formfield_overrides = {
            models.TextField:{‘widget‘: TinyMCE()},
            }
admin.site.register(Tutorial, TutorialAdmin)

回到浏览器刷新页面,效果如下图:

参考链接:

[1] https://pythonprogramming.net/admin-apps-django-tutorial/

[2] https://docs.djangoproject.com/en/2.1/ref/contrib/admin/

[3] http://romanvm.github.io/django-tinymce4-lite/configuration.html

原文地址:https://www.cnblogs.com/yunxiaofei/p/10415372.html

时间: 2024-10-10 13:58:27

Anaconda+django写出第一个web app(三)的相关文章

Anaconda+django写出第一个web app(一)

在安装好Anaconda和django之后,我们就可以开始创建自己的第一个Web app,那么首先创建一个空文件夹,之后创建的文件都在这个文件夹内. 启动命令行进入此文件夹内,可以先通过如下命令查看一下自己的python版本和django版本. python --version  django-admin --version 我的python和django版本分别是3.7.0和2.1.5 使用如下命令创建第一个项目,命名为mysite. django-admin startproject mys

Anaconda+django写出第一个web app(十)

今天继续学习外键的使用. 当我们有了category.series和很多tutorials时,我们查看某个tutorial,可能需要这样的路径http://127.0.0.1:8000/category/series/tutorial,这样看上去十分的繁琐,我们希望无论是在category下还是在series.tutorials下,都只有一级路径. 那么如何做呢?首先在views.py中,我们定义一个single_slug函数: def single_slug(request, single_s

Anaconda+django写出第一个web app(五)

今天开始学习网页风格和设计,就像python有Web框架一样,也有一些CSS框架.对于CSS框架,我们可以使用默认的样式,也可以在原基础上编辑修改.本教程使用的是materialize这个CSS框架[1],首页界面如下: 点解GET STARTED,我们可以把它下载到本地使用,也可以直接复制相应的链接使用. 为了套用如下这个Cards界面,我们直接将代码复制到home.html: 修改后的home.html内容如下: {% load static %} <!-- Compiled and min

Anaconda+django写出第一个web app(八)

今天来实现网站的登入和登出功能. 首先我们需要在urls.py中添加路径,注意此处的路径和在导航栏中设置的文字路径保持一致: from django.urls import path from . import views app_name = 'main' #此处为了urls的命名空间 urlpatterns = [ path('', views.homepage, name='homepage'), path('register/', views.register, name='regist

如何设计和实现一个web app

web app简介 web app其实不算是什么新鲜的东西,相比于传统的web和传统的app,web app这种web和app相结合的产物有的优点如下: 1. 开发上web app更有便捷性,ios开发一上来需要安装一堆东西,android开发也差不多,另外web app的学习成本要比平台客户端开发要低些,至少你不用去招聘ios和android程序员.只要具备基础web开发能力的人都可以比较快上手. 2. 部署方便,在很多情况下,部署一个单页web app只需要一个index.html页面文件作

【2】依照Django官网,创建一个web app

1. Creating app $ python manage.py startapp polls That'll create a directory polls, which is laid out like this: polls/ __init__.py admin.py migrations/ __init__.py models.py tests.py views.py 1.1 Edit polls/models.py: from django.db import models cl

【2】按照Django官网,创建一个web app 创建app/创建相应的数据库表

1. Creating app $ python manage.py startapp polls That'll create a directory polls, which is laid out like this: polls/ __init__.py admin.py migrations/ __init__.py models.py tests.py views.py 1.1 Edit polls/models.py: from django.db import models cl

【3】依照django官网:创建一个web app

1 Creating an admin user $ python manage.py createsuperuser UserName: wuwh Password:   ganbare 2  Start the development server? $ python manage.py runserver 8088 visit :http://127.0.0.1:8000/admin/ 3 .Make the poll app modifiable in the admin from dj

【1】依照Django官网,编写一个web app

1. Creating a project From the command line, cd into a directory where you'd like to store your code, then run the following command: $ django-admin startproject mysite Let's look at what startproject created: mysite/ manage.py mysite/ __init__.py se