本文為作者原創,轉載請注明出處(http://www.cnblogs.com/mar-q/)by 負贔屓
項目展示需要,之前沒研究過Django,網上查資料快速做了一個后台,寫下了防止自己忘了。
1. 安裝Django:
pip install Django
2. 測試Django:
python >> import django >>django.VERSION
顯示版本為(1, 11, 5, 'final', 0),剛接觸,github也沒找到能運行起來的。
3. 運行一個demo
找到django-admin.py這個文件的路徑,一般pip安裝在Python的sit-packages里,如果是anaconda會在anaconda/bin目錄下
whereis django-admin.py
打開該文件所在的目錄
cd [$path of django-admin.py$]
在當前目錄內產生一個HelloWorld項目,也可以在其他目錄創建
django-admin.py startproject HelloWorld
進入HelloWorld項目內,用tree命令查看一下目錄結構,如果沒有tree這個工具建議安裝一個:apt install tree或者yum install tree
tree
.
|-- HelloWorld | |-- __init__.py | |-- settings.py | |-- urls.py | `-- wsgi.py `-- manage.py
4. 運行測試
進入HelloWorld項目manager負責項目運行管理,它內部的子目錄HelloWorld里面存放的是url配置及項目的setting配置,可以先在本地運行一下:
python manage.py runserver
直接訪問localhost:8000就發現成功了。如果是外網訪問,可以通過指定端口的方式,例如指定80端口:
python manage.py runserver 0.0.0.0:80
如果外網不能訪問,需要配置一下setting.py中的ALLOWED_HOSTS,修改為:
ALLOWED_HOSTS = [‘*’]
直接用域名或者公網ip訪問即可:
5. 創建一個uploadImg的app
在HelloWorld目錄下運行manage.py
python manage.py startapp uploadImg
把這個應用加入到setting.py的INSTALLED_APPS中
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'uploadImg',
]
可以看一下現在HelloWorld目錄結構:tree
. ├── HelloWorld1 │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ └── settings.cpython-36.pyc │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── loadImg │ ├── admin.py │ ├── apps.py │ ├── __init__.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py └── manage.py
loadImg是剛才創建的app,其中的model不言而喻,肯定是數據相關了。vim loadImg/models.py,創建IMG類
from django.db import models # Create your models here.
class IMG(models.Model): img = models.ImageField(upload_to='upload')
6. 更新數據庫
python manage.py makemigrations
python manage.py migrate
我是django1.11版本,所以是這兩句命令,低於1.7版本命令為python manage.py syncdb
7. 編輯uploadImg目錄下的views.py,創建圖片上傳和顯示函數
from django.shortcuts import render from uploadImg.models import IMG # Create your views here.
def uploadImg(request): if request.method == 'POST': new_img = IMG( img=request.FILES.get('img') ) new_img.save() return render(request, 'uploadimg.html') def showImg(request): imgs = IMG.objects.all() content = { 'imgs':imgs, } return render(request, 'showimg.html', content)
8. 修改HelloWorld目錄下的urls.py文件,這里相關博客提供的我沒有配通,所以自己修改了一下,1.10版本后直接import views會提示錯誤,新手小白需要注意:
from django.conf.urls import url from django.contrib import admin from uploadImg.views import uploadImg,showImg from django.conf.urls.static import static from django.conf import settings urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^upload', uploadImg), url(r'^show', showImg), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
修改setting.py文件,添加配置上傳文件路徑:
MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/')
9. 在uploadImg目錄下創建templates目錄,在該目錄下分別創建uploadimg.html和showimg.html
<form method="POST" enctype="multipart/form-data"> {% csrf_token %} <input type="file" name="img">
<button type="submit">上傳</button>
</form>
{% for img in imgs %} <img src='{{ img.img.url }}' /> {% endfor %}
10. 運行測試第4步進行
需要注意,如果不是root用戶沒有配置默認是沒有80端口權限的,建議使用其他端口。
參考:
http://www.cnblogs.com/yubenliu/p/6121536.html
http://www.runoob.com/django/django-tutorial.html