Django是基于Python的開源代碼的Web應(yīng)用框架。采用了MTV的框架模式,即模型M,視圖V和模版T。它最初是被開發(fā)來用于管理勞倫斯出版集團(tuán)旗下的一些以新聞內(nèi)容為主的網(wǎng)站的,即是CMS(內(nèi)容管理系統(tǒng))軟件。
Ubuntu 版本: 18.04
Django 版本:3.0(https://www.djangoproject.com/)
一. 搭建環(huán)境
1. 安裝 MySQL 或 MariaDB
? 1) MySQL (5.x.x)
? ? $ sudo apt-get update
? ? $ sudo apt-get install mysql-server mysql-client
? ? $ sudo apt-get install libmysqlclient-dev libssl-dev libcrypto++-dev
? Change mysql root password:
? ? $ mysql -u root
? ? ? (1) use mysql;
? ? ? (2) update mysql.user set authentication_string=password('123456') where user='root' and Host ='localhost';
? ? ? (3) update user set? plugin="mysql_native_password";?
? ? ? (4) flush privileges;
? ? ? (5) quit;
? 2) MariaDB
? ? $ sudo apt-get update
? ? $ sudo apt-get install mariadb-server
2. 安裝 Apache2
? ? $ sudo apt-get install apache2
? ? // Ubuntu 下啟用 rewrite 模塊
? ?
? ? $ sudo a2enmod rewrite
? ? $ sudo vim /etc/apache2/sites-enabled/000-default.conf
? ? ? <Directory /var/www/html/>
? ? ? ? ? Options Indexes FollowSymLinks
? ? ? ? ? AllowOverride All
? ? ? ? ? Require all granted
? ? ? </Directory>
3. 安裝 php7 & phpMyAdmin
? ? $ sudo apt-get install php7.x libapache2-mod-php7.x
? ? ? ? ? Create file /var/www/html/index.php, add
? ? ? ? ? <?php
? ? ? ? ? ? phpinfo()
? ? ? ? ?>
? ? $ sudo service apache2 restart
? ? ? ? Visit http://localhost/index.php, it works!
? ?
? ? $ sudo apt-cache search php7.x? ? // Add mysql module for php7.x
? ? $ sudo service apache2 restart
? ? ? ? Visit http://localhost/index.php,See mysql module
? ? $ sudo apt-get install phpmyadmin
? ? ? ? Default folder /usr/share/phpMyAdmin, above mysql root password is 123456.
? ? $ sudo apt-get install php7.x-cgi? ? // If "php-cgi not found"
? ?
4. 安裝 python & pip
? ? Python 2.7.x
? ?
? ? $ sudo apt-get install python-dev python-pip
? ? Python 3.x.x
? ? $ sudo apt-get install python3-dev python3-pip
? ? #######################
? ? 國外的pip源連接不穩(wěn)定,使用阿里的pip源:
? ? 新建 ~/.pip/pip.conf
? ? $ vim pip.conf
? ? ? ? [global]
? ? ? ? index-url = https://mirrors.aliyun.com/pypi/simple/
? ? ? ? [install]
? ? ? ? trusted-host=mirrors.aliyun.com
5. 安裝 Django 3.x
? ? 1)安裝 MySQL client 支持? ? ?
? ? ? ? ? ? $ sudo apt-get install libmysqlclient-dev (Python 3.6.9, 有效)
? ? ? ? ????$ sudo apt-get install python3-mysqldb? (Python 3.8.0,有效)
? ? ? ? ????$ sudo apt-get install python-mysqldb? (Python 2.x, 沒有測試過)
????????????$ sudo pip install mysqlclient???(Django 3.0 以上, 用這個(gè))
? ? ? ? ????$ sudo pip install pymysql? (Django 2.x, 試試這個(gè))
? ? 2)直接安裝 Django
? ? ? ? $ sudo pip install Django==3.0
? ? 3)虛擬環(huán)境下安裝 Django
? ? ? ? 可以用virtualenv創(chuàng)建一個(gè)新的虛擬環(huán)境,安裝所需的 python包。這樣就能確保我們的包配置與我們正在開展的任何其他項(xiàng)目保持良好的隔離。
? ? ? ? (1)安裝 virtualenv
? ? ? ? ? ? ? $ sudo pip3 install virtualenv
? ? ? ? (2)配置 virtualenv 環(huán)境
? ? ? ? ? ? ? $ find ~/ -name virtualenv
? ? ? ? ? ? ? ? ? /home/xxx/.local/bin/virtualenv
? ? ? ? ? ? ? $ cat << EOF > ~/a
? ? ? ? ? ? ? ? ? > export PATH=$PATH:/home/xxx/.local/bin
? ? ? ? ? ? ? ? ? > EOF
? ? ? ? ? ? ? $ virtualenv env
? ? ? ? ? ? ? $ source env/bin/activate
? ? ? ? ? ? ? $ deactivate? ? # 退出虛擬環(huán)境
6. 安裝 mod-wsgi, 設(shè)置 Django + Apache2
? ? ---------- Apache2 WSGI ----------
? ? $ sudo apt-get install libapache2-mod-wsgi
? ? $ sudo apt-get install libapache2-mod-wsgi-py3? ? # For Python 3
? ? $ vim /etc/apache2/apache2.conf
? ? ? ? LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
? ? ? ? LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-3.x? # For Python 3
? ? ? ? 在apache2.conf或 vHost配置文件里添加如下內(nèi)容:
? ? ? ? <VirtualHost *:8080>? ? ?
? ? ? ? ? ? ServerName localhost
? ? ? ? ? ? ServerAlias localhost_test
? ? ? ? ? ? DocumentRoot /home/xxx/workshop/django/project-name
? ? ? ? ? ? # DirectoryIndex index.html
? ? ? ? ? ? # Media files
? ? ? ? ? ? #Alias /media/ /home/xxx/workshop/django/project-name/media/
? ? ? ? ? ? # Static files (js/css/images)
? ? ? ? ? ? Alias /static/ /home/xxx/workshop/django/project-name/static/
? ? ? ? ? ? <Directory /home/xxx/workshop/django/project-name/static/>
? ? ? ? ? ? ? ? Require all granted
? ? ? ? ? ? </Directory>
? ? ? ? ? ? # WSGI
? ? ? ? ? ? WSGIScriptAlias / /home/xxx/workshop/django/project-name/project-name/wsgi.py
? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? <Directory "/home/xxx/workshop/django/project-name/project-name/">
? ? ? ? ? ? ? ? Require all granted
? ? ? ? ? ? ? ? <Files wsgi.py>
? ? ? ? ? ? ? ? ? ? Order deny,allow
? ? ? ? ? ? ? ? ? ? Allow from all
? ? ? ? ? ? ? ? </Files>
? ? ? ? ? ? </Directory>
? ? ? ? ? ? ErrorLog ${APACHE_LOG_DIR}/error.log
? ? ? ? ????CustomLog ${APACHE_LOG_DIR}/access.log combined
? ? ? ? </VirtualHost>
7. 安裝 Django restFramework & Oauth2.0 (開發(fā)RESTFUL時(shí)需要,非必選)
? ? $ sudo pip install djangorestframework
? ? $ sudo pip install djangorestframework-xml (optional)
? ? $ sudo pip install django-oauth-toolkit (optional, djangorestframework-oauth)
8. 安裝 CORS for Django (開發(fā)跨域訪問時(shí)需要,非必選)
? ? $ sudo pip install django-cors-headers
9. 安裝 Captcha (Form提交數(shù)據(jù)的簡單圖形驗(yàn)證,非必選)
? ? $ sudo pip install django-simple-captcha
二. 創(chuàng)建 Django 項(xiàng)目
1. 創(chuàng)建
? ? 運(yùn)行命令行:
? ? $ django-admin startproject 'project-name'
2. 運(yùn)行項(xiàng)目
? ? 進(jìn)入項(xiàng)目 'project-name' 目錄, 運(yùn)行:
? ? $ python manage.py runserver
? ? 用瀏覽器訪問:http://localhost:8000, 可以指定 Host 和 Port,如:
? ? $ python manage.py runserver? 192.168.0.1:8080? ?
3. 添加 app
? ? ? 進(jìn)入項(xiàng)目 'project-name' 目錄, 運(yùn)行:
? ? $ python manage.py startapp 'app-name'
4. 配置 MySQL
? 修改 settings.py
? ? DATABASES = {
? ? ? ? 'default': {
? ? ? ? ? ? 'ENGINE': 'django.db.backends.mysql',
? ? ? ? ? ? 'NAME': 'mydatabase',
? ? ? ? ? ? 'USER': 'mydatabaseuser',
? ? ? ? ? ? 'PASSWORD': 'mypassword',
? ? ? ? ? ? 'HOST': 'localhost',
? ? ? ? ? ? 'PORT': '3306',
? ? ? ? }
? ? }
? 運(yùn)行命令行:
? ? $ python manage.py makemigrations 'app-name'
? ? $ python manage.py migrate
5. Django shell
? ? $ python manage.py shell
6. Django Admin
? ? $ python manage.py createsuperuser
7. 支持多語言(I18n)
? ? Django 2.2.x 下測試過,3.x 沒測試過。
? ? 1) 修改 views.py
? ?
? ? ? ? from django.utils.translation import gettext_lazy as _
? ? ? ? _('Demo text')
? ? 2) 修改模版 HTML
? ? ? ? 略
? ? 3) 修改 setting.py:
? ? ? ? ? #LANGUAGE_CODE = 'en-us'
? ? ? ? ? LANGUAGE_CODE = 'zh-hans'
? ?
? ? ? ? ? # Add locale paths
? ? ? ? ? LOCALE_PATHS = (
? ? ? ? ? ? ? ? ? os.path.join(BASE_DIR, 'locale'),
? ? ? ? ? )
? ? 4) 生成Message文件
? ? ? ? ? $ mkdir locale
? ? ? ? ? $ django-admin makemessages -l zh_Hans?
? ? ? ? ? $ django-admin compilemessages