Linux环境部署Django平台(图文详解)

        Linux环境部署Django平台(图文详解)

安装环境:

[root@room ~]# cat  /etc/redhat-release 

CentOS Linux release 7.4.1708 (Core)

1.创建django项目

点击file-->new project--> Django-->Location(设定项目名称),这里采用习惯命名的mysite。

选择python解释器版本,点击create按钮,Django将自动生成下面的目录结构: file->settings->languages&frame works->Django

2. 创建虚拟环境

[root@room ~]# python3  -m  venv  /opt/djenv

[root@room ~]# cd  /opt/djenv/

[root@room djenv]# ls

bin  include  lib  lib64  pyvenv.cfg

3. 激活虚拟环境 

[root@room ~]# source /opt/djenv/bin/activate

(djenv) [root@room ~]#  

4. 在pycharm中修改项目解释器

File -> Settings -> Project Interpreter -> 点击齿轮,add local ->

existing environment -> 找到/opt/djenv/bin/python 

5.在虚拟环境中安装django

(djenv) [root@room ~]# pip install django==1.11.6

Collecting django==1.11.6
  Downloading http://pypi.doubanio.com/packages/82/33/f9d2871f3aed5062661711bf91b3ebb03daa52cc0e1c37925f3e0c4508c5/Django-1.11.6-py2.py3-none-any.whl (6.9MB)
    100% |████████████████████████████████| 7.0MB 31.0MB/s 
Collecting pytz (from django==1.11.6)
  Downloading http://pypi.doubanio.com/packages/30/4e/27c34b62430286c6d59177a0842ed90dc789ce5d1ed740887653b898779a/pytz-2018.5-py2.py3-none-any.whl (510kB)
    100% |████████████████████████████████| 512kB 165kB/s 
Installing collected packages: pytz, django
Successfully installed djanfile->settings->languages&frame works->Djangogo-1.11.6 pytz-2018.5
You are using pip version 9.0.1, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

Django项目管理:

1.  创建项目

(djenv) [root@room ~]# django-admin startproject mysite   #第一步若已创建,则步骤可以忽略 

(djenv) [root@room ~]# cd mysite/

2.  在pycharm中配置django

file->settings->languages&frame works->Django 

django项目最终应该放到apahce/nginx服务器上,对外提供服务。在开发过程中,为了方便,django提供了一个内建的服务器。

4. 启动内建服务器,0:80是0.0.0.0:80的简写(若80端口已占用,先关闭80端口)

 (djenv) [root@room mysite]# python manage.py runserver 0:80

Performing system checks...

System check identified no issues (0 silenced).

You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

October 17, 2018 - 11:19:16
Django version 1.11.6, using settings 'mysite.settings'
Starting development server at http://0:80/
Quit the server with CONTROL-C.

5. 在mariadb中为django项目创建数据库部署django平台django

   CREATE DATABASE lmzf  DEFAULT CHARSET utf8;

(djenv) [root@room mysite]# mysql -uroot -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 315
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>  CREATE DATABASE lmzf  DEFAULT CHARSET utf8;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> exit

6. 修改数据库设置

(djenv) [root@room mysite]# vim mysite/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'lmzf',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

ALLOWED_HOSTS = '*'
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai' 

7. 配置pymysql模块

(djenv) [root@room mysite]# pip install pymysql

Collecting pymysql
  Downloading http://pypi.doubanio.com/packages/a7/7d/682c4a7da195a678047c8f1c51bb7682aaedee1dca7547883c3993ca9282/PyMySQL-0.9.2-py2.py3-none-any.whl (47kB)
    100% |████████████████████████████████| 51kB 216kB/s 
Collecting cryptography (from pymysql)
  Downloading http://pypi.doubanio.com/packages/59/32/92cade62c645756a83598edf56289e9b19aae5370642a7ce690cd06bc72f/cryptography-2.3.1-cp34-abi3-manylinux1_x86_64.whl (2.1MB)
    100% |████████████████████████████████| 2.1MB 209kB/s 
Collecting six>=1.4.1 (from cryptography->pymysql)
  Downloading http://pypi.doubanio.com/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
Collecting idna>=2.1 (from cryptography->pymysql)
  Downloading http://pypi.doubanio.com/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl (58kB)
    100% |████████████████████████████████| 61kB 215kB/s 
Collecting asn1crypto>=0.21.0 (from cryptography->pymysql)
  Downloading http://pypi.doubanio.com/packages/ea/cd/35485615f45f30a510576f1a56d1e0a7ad7bd8ab5ed7cdc600ef7cd06222/asn1crypto-0.24.0-py2.py3-none-any.whl (101kB)
    100% |████████████████████████████████| 102kB 199kB/s 
Collecting cffi!=1.11.3,>=1.7 (from cryptography->pymysql)
  Downloading http://pypi.doubanio.com/packages/6d/c0/47db8f624f3e4e2f3f27be03a93379d1ba16a1450a7b1aacfa0366e2c0dd/cffi-1.11.5-cp36-cp36m-manylinux1_x86_64.whl (421kB)
    100% |████████████████████████████████| 430kB 208kB/s 
Collecting pycparser (from cffi!=1.11.3,>=1.7->cryptography->pymysql)
  Downloading http://pypi.doubanio.com/packages/68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a/pycparser-2.19.tar.gz (158kB)
    100% |████████████████████████████████| 163kB 208kB/s 
Installing collected packages: six, idna, asn1crypto, pycparser, cffi, cryptography, pymysql
  Running setup.py install for pycparser ... done
Successfully installed asn1crypto-0.24.0 cffi-1.11.5 cryptography-2.3.1 idna-2.7 pycparser-2.19 pymysql-0.9.2 six-1.11.0
You are using pip version 9.0.1, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command

(djenv) [root@room mysite]# vim  mysite/__init__.py

import pymysql
pymysql.install_as_MySQLdb()

8. 访问后台管理界面 http://127.0.0.1/admin

(djenv) [root@room mysite]# python3  manage.py runserver  0:80

Performing system checks...

System check identified no issues (0 silenced).

You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

October 17, 2018 - 19:34:33
Django version 1.11.6, using settings 'mysite.settings'
Starting development server at http://0:80/
Quit the server with CONTROL-C.

9. 生成数据库

(djenv) [root@room mysite]# python manage.py migrate

System check identified some issues:

WARNINGS:
?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default'
	HINT: MySQL's Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it. See: https://docs.djangoproject.com/en/1.11/ref/databases/#mysql-sql-mode
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying sessions.0001_initial... OK

10. 创建管理员账号 

(djenv) [root@room mysite]# python manage.py createsuperuser

Username (leave blank to use 'root'): 
Email address: lmzf@163.com
Password: 
Password (again): 
Superuser created successfully.

11.进入mariadb查看库表

(djenv) [root@room mysite]# mysql  -uroot -p123456

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 331
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show  databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| lmzf               |
| mysql              |
| performance_schema |        |
| test               |
+--------------------+
7 rows in set (0.00 sec)

MariaDB [(none)]> use  lmzf;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [lmzf]> desc  polls_choice;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| choice_text | varchar(200) | NO   |     | NULL    |                |
| votes       | int(11)      | NO   |     | NULL    |                |
| question_id | int(11)      | NO   | MUL | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

MariaDB [lmzf]> show  tables;
+----------------------------+
| Tables_in_lmzf             |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| polls_choice               |
| polls_question             |
+----------------------------+
12 rows in set (0.00 sec)

MariaDB [lmzf]> desc  polls_choice;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| choice_text | varchar(200) | NO   |     | NULL    |                |
| votes       | int(11)      | NO   |     | NULL    |                |
| question_id | int(11)      | NO   | MUL | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

MariaDB [lmzf]> desc  polls_question;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(11)      | NO   | PRI | NULL    | auto_increment |
| question_text | varchar(200) | NO   |     | NULL    |                |
| publish_date  | datetime     | NO   |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+

管理应用APP

1. 创建应用

  (djenv) [root@room mysite]# python manage.py startapp polls

2. 将应用添加到项目中

INSTALLED_APPS = [
    ... ...
    'polls',
  ]

3. 配置路由URLConf,当访问http://127.0.0.1/polls/开头的网址,都交由polls应用。当用户访问一个网址时,都是找到mysite/urls.py查找使用哪个视图函数去处理。可以在该文件中授权将以http://127.0.0.1/polls/开头的网址,交给polls/urls.py处理

(djenv) [root@room mysite]# vim mysite/urls.py

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^polls/', include('polls.urls')),
]

4. 创建polls主页URL声明

(djenv) [root@room mysite]# vim polls/urls.py

from django.conf.urls import url
from . import views
urlpatterns = [
    url(r'^$', views.index, name='index')  # http://127.0.0.1/polls/
]

5. 创建主面的视图文件

 (djenv) [root@room mysite]# vim polls/views.py

 from django.shortcuts import render, HttpResponse
 def index(request):
    return HttpResponse('<h1>Polls OK</h1>')

6. 访问http://127.0.0.1/,404页面不存在;访问http://127.0.0.1/polls/返回正确结果

(djenv) [root@room mysite]# python manage.py  runserver 0:80

Performing system checks...

System check identified no issues (0 silenced).
October 17, 2018 - 20:00:15
Django version 1.11.6, using settings 'mysite.settings'
Starting development server at http://0:80/
Quit the server with CONTROL-C.

 

创建模型

1. 创建模型

(djenv) [root@room mysite]# vim polls/models.py

from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    publish_date = models.DateTimeField('date published')

class Choice(models.Model):
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
question = models.ForeignKey(Question, on_delete=models.CASCADE)

2. 生成数据库中的表

(djenv) [root@room mysite]# python manage.py makemigrations

Migrations for 'polls':
  polls/migrations/0001_initial.py
    - Create model Choice
    - Create model Question
    - Add field question to choice

(djenv) [root@room mysite]# python manage.py migrate

System check identified some issues:

WARNINGS:
?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default'
	HINT: MySQL's Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it. See: https://docs.djangoproject.com/en/1.11/ref/databases/#mysql-sql-mode
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
  Applying polls.0001_initial... OK

3. 分析表

数据库中将会为Question和Choice创建polls_question,polls_choice和 polls_question表中有三个字段。我们没有手工指定主键,django自动创建一个名为id的字段,将它设置为主键,主键可以自动增长 polls_choice表中有四个字段。主键与polls_question一样。class中question是外键,那么polls_choice表中就会出现一个question_id的外键。如果将class中的question改名为q,那么表中的question_id就会变为q_id

4. 将模型注册到管理后台

(djenv) [root@room mysite]# vim polls/admin.py

from django.contrib import admin
from .models import Question, Choice

admin.site.register(Question)
admin.site.register(Choice)

5. 访问管理后台,可以看到两个模型

访问http://127.0.0.1/admin,用户名是数据库设定的root及密码

6. 在后台添加问题后,每个问题都显示为Question object,解决方法如下:

(djenv) [root@room mysite]# vim  polls/models.py 

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    publish_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

7. 再次访问http://127.0.0.1/admin

(djenv) [root@room mysite]# python manage.py runserver  0:80

Performing system checks...

System check identified no issues (0 silenced).
October 17, 2018 - 20:28:50
Django version 1.11.6, using settings 'mysite.settings'
Starting development server at http://0:80/
Quit the server with CONTROL-C.

8.自定义管理后台,后面增加显示的字段

(djenv) [root@room mysite]# vim polls/admin.py

from django.contrib import admin
from .models import Question, Choice

class QuestionAdmin(admin.ModelAdmin):
    list_display = ('question_text', 'publish_date')

class ChoiceAdmin(admin.ModelAdmin):
    list_display = ('question', 'choice_text', 'votes')

admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice, ChoiceAdmin)

9. 为问题增加时间过滤器

(djenv) [root@room mysite]# vim polls/admin.py

class QuestionAdmin(admin.ModelAdmin):
    list_display = ('question_text', 'publish_date')
    list_filter = ('publish_date',)   # 增加此项

10. 为Question增加时间轴,点击时间,可以看到某个时间发布的问题

 (djenv) [root@room mysite]# vim mysite/settings.py

  USE_TZ = False

 (djenv) [root@room mysite]# vim /etc/my.cnf

default-time_zone = '+08:00'

 (djenv) [root@room mysite]# vim polls/admin.py

class QuestionAdmin(admin.ModelAdmin):
    list_display = ('question_text', 'publish_date')
    list_filter = ('publish_date',)
date_hierarchy = 'publish_date' #增加此行

11. 增加搜索,可以通过问题中的关键字时行搜索;

   添加choice时,显示Question的详情(注意,必须是外键关系);

 为question增加默认排序,第一标准是时间,第二标准是问题

 (djenv) [root@room mysite]# vim polls/admin.py

class QuestionAdmin(admin.ModelAdmin):
    list_display = ('question_text', 'publish_date')
    list_filter = ('publish_date',)
    date_hierarchy = 'publish_date'
    search_fields = ('question_text',)  #增加搜索,可以通过问题中的关键字时行搜索;
    ordering = ('-publish_date', 'question_text')  
    #为question增加默认排序,第一标准是时间第二标准是问题;-publish_date 表示降序排列

class ChoiceAdmin(admin.ModelAdmin):
    list_display = ('question', 'choice_text', 'votes')
    raw_id_fields = ('question',)  #添加choice时,显示Question的详情(注意,必须是外键关系)    

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值