【Django Series - 01】以前用 1.6.11,最近用 1.10.8,现在又想换最新版本 2.1.2(探索中...)

Django Series(Django2.1.2 + Anaconda3)

(一)安装并配置 Django 环境 ||| 基于 Django 进行 Web 开发

(二)Django 基础知识:语法、教程

(三)用户管理模块:创建用户、登录、退出

(四)数据的增删改:用户提交数据,验证数据的有效性并传输至后台(jQuery.post、jQuery.getJSON)

(五)基于 "xlsxwriter  + BytesIO"(Python3)生成 Excel 报表 ||| Python2 StringIO.StringIO()


说明:本系列教程根据最近实践过程进行整理、总结和分享。由于时间和精力有限,发表时内容分析部分可能不是很完整,后续有时间会慢慢补充。同时!!也希望感兴趣的同学可以提出一些细节问题和建议,我会根据这些问题进一步整理和完善哈。

更新日志:

20181012:整理第一版,开始探索 Django1.10.8,并整理博文;

20181013:抛弃了使用不久的 1.10.8 版本,转而使用 Django2.1.2 + Anaconda3,又是遇到一大推细节问题;

20181019:归类于【Django Series】,主要是这篇博文的参考资料有归纳了之前关于 Django 的相关博文;


相关资源:

  • Django 1.6.11 + Python2
  • Django 1.10.8 + Anaconda2
  • Django 2.1.2 + Anaconda3

最近刚尝试使用 Django 1.10.8,很多内容还在学习中。尝试了 Django 1.10.8 一段时间,感觉还ok啦。不过最近阅读了 Django 官网文档(https://www.djangoproject.com/start/overview/),得知 Django 1.11及以后的版本只支持 Python3,而团队也建议使用 Python3 进行开发,毕竟后续应该是个趋势了。想来想去,最终还是决定抛弃使用不久的 Django 1.10.8,开始尝试使用最新版本的 Django 2.1.2 + Anaconda3。又是一段漫长的探索...

参考资料:

基本操作步骤:

  1. 安装 python 和 django,并配置环境变量;
  2. 将 django-admin.py 文件复制到目录 A(A表示你想在该目录下创建项目);
  3. 输入【 python django-admin.py startproject project_name 】创建项目;此时在目录 project_name 下会生成 manage.py;
  4. 输入【 python .\manage.py runserver 127.0.0.1:8000 】运行本地IP,跑起项目;此时即可选择浏览器,输入网址  http://127.0.0.1:8000/ 打开网页;
  5. 输入【 python .\manage.py startapp appName 】创建app项目,并进行如下配置:
    1. 手动添加urls.py;
    2. 配置【setting.py】,包括appName、templates、static等(后续的数据库类型也是在这里配置);
    3. 理解每个appName下的urls.py和projectName目录下的urls.py的关系,比进行配置;
    4. 编写appName目录下的【views.py】,返回变量和具体网页;
  6. 创建数据库
    1. django 1.10.8版本:输入【python manage.py migrate】
    2. django 1.6.11版本:输入【 python .\manage.py sycndb 】

查看 django 版本

## way-1
>>> import django
>>> print django.VERSION # Python2的格式
>>> print(django.VERSION) # Python3的格式

## way-2
python -m django --version ## 直接在终端输入

Django 2.1.2

difference:

## 1.6.11

## 1.10.8
urlpatterns = [
	url(r'^$', views.Home_ManageSystem, name='Home_ManageSystem'),
    url(r'^admin/', include(admin.site.urls)),
]

## 2.1.2
urlpatterns = [
    path(r'^$', views.Home_ManageSystem, name='Home_ManageSystem'),
    path('admin/', admin.site.urls),
]

# app_name = 'app_ManageSystem'
# https://docs.djangoproject.com/en/1.9/intro/tutorial03/#namespacing-url-names

Django 2.1.2:登录默认界面 http://127.0.0.1:8000/

problems:

## 数据库中新增的 on_delete 参数
File "F:\for_jackan\app_ManageSystem\models.py", line 12, in BRsystemUser
Users = models.OneToOneField(User)

TypeError: __init__() missing 1 required positional argument: 'on_delete'
## 

File "C:\Anaconda3\lib\site-packages\django-2.1.2-py3.5.egg\django\urls\conf.py", line 39, in include 
'Specifying a namespace in include() without providing an app_name '

django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. 
Set the app_name attribute in the included module, or pass a 2-tuple containing the list of patterns and app_name instead.

[05/Sep/2017 12:24:59] "GET /hello HTTP/1.1" 404 1947 Not Found: /favicon.icov


配置 setting(django 1.10.8):

setting.py 是在 python django-admin.py startproject project_name 的时候自动创建的。django 1.10.8 相较于 django 1.6.11 的变动不大,主要是 TEMPLATES,如下所示:

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',
            ],
            'debug': True,
        },
    },
]

配置 urls(django 1.10.8):

project 目录下的 urls.py:相对 django 1.6.11 版本还是有较大的变化,django 1.10.8 版本配置如下所示:

  1. 导入所有 app_name 目录下的 views:from app_ActiveModels import views
  2. url 路由:url(r'^$', views.Home_ActiveLearningSystem, name='Home_ActiveLearningSystem')

django 1.6.11 版本配置:url(r'^$', 'app_analyse.views.main'),直接使用 app_analyse.views.main 即可找到对应的函数。咋一看新的版本好像还比较麻烦,但这样改肯定也是有一定的道理(我也是最近才开始使用 django 1.10.8 版本,因为在数据库方面做了较大的改进,允许不删除表的情况下,增加新的表字段)。

"""ActiveLearning_system URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url, include
from django.contrib import admin
from app_ActiveModels import views

urlpatterns = [
    url(r'^$', views.Home_ActiveLearningSystem, name='Home_ActiveLearningSystem'),
    url(r'^admin/', admin.site.urls),
    url(r'^app_ActiveModels/', include('app_ActiveModels.urls', namespace = 'app_ActiveModels')),
]

## + static(settings.STATIC_URL, document_root = settings.STATIC_ROOT)

django 1.10 数据库迁移:

python manage.py migrate
python manage.py makemigrations app_ManageSystem
python manage.py createsuperuser ## 创建超级管理员

MySQL 数据库操作:

CREATE DATABASE DB_BR_Pro_Manage_System CHARACTER SET utf8;

drop database DB_BR_Pro_Manage_System;

运行:

(! python ./manage.py runserver 47.106.205.122:8000 &)

(! python manage.py runserver 0:8000 &)

(! python manage.py runserver 0:8000 --insecure &)

注意:

  1. 服务器上选择的端口,要注意是否开放。
  2. Django运行访问项目出现的问题:DisallowedHost at / Invalid HTTP_HOST header(在setting配置处,改为 ALLOWED_HOSTS = ['*'])

在 views.py 中导入外部自定义的 py 文件:

想必很多人都有这个需求:不想把所有的代码都写在 veiws.py 文件中,不好管理且可读性又差。

  1. veiws.py 文件用来实现逻辑、以及渲染指定的 html 文件;
  2. 一些计算过程、算法写在外部自定义的 py 文件中,如:在根目录下新建一个 lib 文件夹,然后再lib目录下新建一些所需要的 py 脚本。

方法:

import sys
sys.path.append("lib_hcq")
from lib_hcq.log_relevant import *

遇到的问题:

ImportError: No module named lib_hcq.log_relevant

解决办法:

## 问题:lib_hcq 目录下没有 __init__.py 文件
## 解决:创建一个空的py文件,命名为 __init__.py,在 views.py 文件中引入:
sys.path.append("lib_hcq/log_relevant.py")
from lib_hcq.log_relevant import *

## A package can be imported with import foo.bar or from foo import bar. 
## For a directory (like polls) to form a package, it must contain a special file __init__.py, even if this file is empty.

猜你喜欢

转载自blog.csdn.net/Houchaoqun_XMU/article/details/82935079