国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Django3 學(xué)習(xí)記錄筆記 | 國光

Django是一個(gè)文檔很全的框架,學(xué)習(xí)的時(shí)候老是遇到一些坑,這里就順便記錄一下,以便后面使用,同時(shí)也希望本文可以幫助到其他的朋友。

開發(fā)環(huán)境

操作系統(tǒng):macOS Cataline 10.15.3

Pythonpyenv 安裝的 pypy3.6-7.3.0 (PyPy解釋器平均比我們平時(shí)使用的CPython快4.4倍)

Django:Django 3.0.3

相關(guān)依賴

MySQL

macOS下Django3在連接MySQL會(huì)出一些問題,解決如下:

Bash
# 確保 pip 是最新版本$ pip install --upgrade pip# 臨時(shí)在當(dāng)前的shell環(huán)境中配置一個(gè) openssl 變量export LDFLAGS="-L/usr/local/opt/openssl/lib $LDFLAGS"export CPPFLAGS="-I/usr/local/opt/openssl/include $CPPFLAGS"$ pip install mysqlclient

pillow

models.py中含有ImageField圖片類型的時(shí)候,如果pillow沒有安裝好的話 會(huì)報(bào)錯(cuò):

Python
image = models.ImageField(upload_to='avatar/%Y/%m', verbose_name='頭像', max_length=100)

解決方法是macOS下安裝配置好zlib即可:

Bash
# 安裝 zlib$ brew install zlib# 鏈接 zlib 會(huì)提示$ brew link zlib --forceWarning: Refusing to link macOS-provided software: zlibFor compilers to find zlib you may need to set:  export LDFLAGS="-L/usr/local/opt/zlib/lib"  export CPPFLAGS="-I/usr/local/opt/zlib/include"

根據(jù)上述提示,進(jìn)行如下操作:

Bash
# 臨時(shí)在當(dāng)前的shell環(huán)境中配置一個(gè) zlib 變量export LDFLAGS="-L/usr/local/opt/zlib/lib"export CPPFLAGS="-I/usr/local/opt/zlib/include"$ pip install pillow

目錄配置

templates

模板目錄 Python 命令行創(chuàng)建的 Django 項(xiàng)目默認(rèn)是沒有自動(dòng)生成這個(gè)目錄的,首先項(xiàng)目目錄下新建templates文件夾,然后配置一下settings:

settings.py

Python
TEMPLATES = [    {        'BACKEND': 'django.template.backends.django.DjangoTemplates',        'DIRS': [os.path.join(BASE_DIR, 'templates')], # 將 templates 設(shè)置為模板目錄        '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',            ],        },    },]

static

該目錄存放一些css js 之類的靜態(tài)文件,也得手動(dòng)到 settings.py 添加配置一下:

settings.py

Python
STATIC_URL = '/static/'STATICFILES_DIRS = [(os.path.join(BASE_DIR, 'static'))]

apps

當(dāng)項(xiàng)目下的app太多的時(shí)候,項(xiàng)目的目錄結(jié)構(gòu)看上去就會(huì)比較混亂,一個(gè)解決辦法就是將項(xiàng)目下的所有app都放到一個(gè)apps的文件夾中,首先項(xiàng)目下新建apps文件夾,接著手動(dòng)到 settings.py 添加配置一下:

settings.py

Python
import osimport sysBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.path.insert(0, os.path.join(BASE_DIR, 'apps')) # 將 apps 文件夾添加到 BASE_DIR中

media

media文件夾用來存放用戶上傳的圖片資料等,首先配置下settings.py

settings.py

Python
TEMPLATES = [    {        'BACKEND': 'django.template.backends.django.DjangoTemplates',        'DIRS': [os.path.join(BASE_DIR, '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',                'django.template.context_processors.media', # 添加 media 模板            ],        },    },]

接著配置 media 根目錄變量:

settings.py

Python
MEDIA_URL = '/media/'MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

配置好之后在 urls.py 里面配置下 media 的路由規(guī)則:

urls.py

Python
from django.urls import path, re_pathfrom django.views.static import servefrom project.settings import MEDIA_ROOTurlpatterns = [    path('admin/', admin.site.urls),      # 配置 media 的處理    re_path('media/(?P<path>.*)', serve, {'document_root': MEDIA_ROOT}, name='org_list'),  ]

下面看一下 簡(jiǎn)單的 引用 meida 中圖片文件的實(shí)例:

models.py

Python
class CourseOrg(models.Model):    ...    image = models.ImageField(upload_to='org/%Y/%m', verbose_name='logo', max_length=100)    ...

前端調(diào)用顯示 media 里的文件

Html
<img width="200" height="120" class="scrollLoading" data-url="{{ MEDIA_URL }}{{ course_org.image }}"/>

實(shí)用插件

驗(yàn)證碼

項(xiàng)目地址https://github.com/mbi/django-simple-captcha

Bash
$ pip install django-simple-captcha

安裝好之后,在settings.py引用即可:

settings.py

Python
INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'captcha',  # 引用驗(yàn)證碼插件]

引用完成后,更新下數(shù)據(jù)庫的信息,因?yàn)檫@個(gè)驗(yàn)證碼信息是存放在本地?cái)?shù)據(jù)庫中的:

Bash
$ python manage.py makemigrations$ python manage.py migrate 

數(shù)據(jù)庫更新成功后可以在數(shù)據(jù)庫下看到 captcha_captchastore 表名,接著得配置下驗(yàn)證碼的url路由規(guī)則:

urls.py

Python
urlpatterns = [    path('admin/', admin.site.urls),    path('captcha/', include('captcha.urls')),]

Form表單中定義如下:

forms.py

Python
from django import formsfrom captcha.fields import CaptchaFieldclass RegisterForm(forms.Form):    email = forms.EmailField(required=True)    password = forms.CharField(required=True, min_length=5)    captcha = CaptchaField(error_messages={'invalid': '驗(yàn)證碼錯(cuò)誤'})

Views里面實(shí)例化這個(gè)表單類:

views.py

Python
class RegisterView(View):    def get(self, request):        register_form = RegisterForm()        return render(request, 'register.html', {            'register_form': register_form        })

views.py里面 返回了register_form到前端,接著前端可以直接調(diào)用 驗(yàn)證碼:

Html
<div class="form-group marb8 captcha1"><label>驗(yàn)證碼</label>{{ register_form.captcha }}</div>

分頁

項(xiàng)目地址https://github.com/jamespacileo/django-pure-pagination

Bash
$ pip install django-pure-pagination

安裝好之后,在settings.py引用即可:

Python
INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',      'pure_pagination',]

views里面的基本用法:

views.py

Python
from pure_pagination import Paginator, EmptyPage, PageNotAnIntegerclass OrgView(View):    """    課程機(jī)構(gòu)列表功能顯示    """    def get(self, request):        # 課程機(jī)構(gòu)        all_orgs = CourseOrg.objects.all()        # 官方提倡的寫法        try:            page = request.GET.get('page', 1)        except PageNotAnInteger:            page = 1        # 將數(shù)據(jù)庫中 查詢的 all_orgs 分頁 每頁顯示5個(gè)        p = Paginator(all_orgs, 5, request=request)        orgs = p.page(page)        return render(request, 'org-list.html', {            'all_orgs': orgs,  # 分頁的結(jié)果傳給前端        })

前端分頁的引用:

Html
<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 %}<!-- 顯示中間頁數(shù) 和 高亮 當(dāng)前頁 -->  {% for page in all_orgs.pages %}  {% if page %}  {% ifequal page all_orgs.number %}  <li class="active"><a href="?{{ page.querystring }}" class="page">{{ 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分頁效果

導(dǎo)入導(dǎo)出

項(xiàng)目地址https://github.com/django-import-export/django-import-export

Bash
$ pip install django-import-export

安裝好之后,在settings.py引用即可:

settings.py

Python
INSTALLED_APPS = [    'import_export',  # 引用導(dǎo)入導(dǎo)出插件    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',]

接著可以直接在Django Admin后臺(tái)引用:

admin.py

Python
from import_export.admin import ImportExportActionModelAdmin@admin.register(CourseOrg)class CourseOrgAdmin(ImportExportActionModelAdmin):    list_display = ['name', 'image_data', 'address']    search_fields = ['name', 'city', 'address', 'desc']    list_filter = ['city', 'add_time']

最后配合Simple UI的效果如下:

Simple UI 導(dǎo)入導(dǎo)出

Admin 配置

修改后臺(tái)名稱

在urls.py 里面添加 如下即可:

Python
admin.site.site_header = '后臺(tái)管理'admin.site.site_title = 'Django 后臺(tái)管理'

核心原理就是 在引用 這個(gè)模塊的文件里面添加配置即可生效:

Python
from django.contrib import admin

最后效果如下:

Django自定義后臺(tái)名稱

圖片顯示

Django Admin 的列表中圖片只顯示 url 地址,卻不能直接顯示出來:

Django Admin圖片不顯示

解決方法就是重寫Django Admin 后臺(tái)圖片的顯示。

models.py

Python
from django.utils.html import format_htmlclass CourseOrg(models.Model):    image = models.ImageField(upload_to='org/%Y/%m', verbose_name='logo', max_length=100)    # 定義 image_data 將 url 手動(dòng) 通過 img 表情顯示出來    def image_data(self):        return format_html(            '<img src="{}" width="200px" height="90px"/>',            self.image.url,        )        # 設(shè)置標(biāo)題    image_data.short_description = '圖片'  

admin.py

Python
from django.contrib import admin@admin.register(CourseOrg)class CourseOrgAdmin(admin.ModelAdmin):      # 顯示里面 傳入 我們自定義的 image_data    list_display = ['name', 'image_data', 'address']    search_fields = ['name', 'city', 'address', 'desc']    list_filter = ['city', 'add_time']    # 設(shè)置該列不可編輯    readonly_fields = ('image_data',)

最后顯示效果如下:

Django Admin 圖片顯示
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Django pyecharts 完成前后端分離Demo
python3在win7下django之web開發(fā)
Django-最流行的Python WEB框架
5 分鐘,帶你快速入門 Django DRF
python測(cè)試開發(fā)django-34.xadmin管理后臺(tái)
PyCharm 開發(fā)Django ,錯(cuò)誤匯總
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服