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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM