安装Django

安装Django:

C:WINDOWSsystem32>easy_install django

C:UsersTLCB>easy_install django
Searching for django
Reading https://pypi.python.org/simple/django/
Best match: Django 1.11.5
Downloading https://pypi.python.org/packages/06/9f/7f07816842ad8020d3bdcfbedc568
314e0739bc3de435bc034874b6f3e39/Django-1.11.5.tar.gz#md5=8cef0d42aabacbc414ec4fb
bb6056f3c
Processing Django-1.11.5.tar.gz
error: [Errno 22] invalid mode ('wb') or filename: 'c:\users\tlcb\appdata\lo
cal\temp\easy_install-tyef2j\Django-1.11.5\tests\staticfiles_tests\apps\t
est\static\test\xe2x8ax97.txt'

C:UsersTLCB>


C:UsersTLCB>pip install django
You are using pip version 6.0.8, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting django
  Downloading Django-1.11.5-py2.py3-none-any.whl (6.9MB)
    100% |################################| 7.0MB 37kB/s
Collecting pytz (from django)
  Downloading pytz-2017.2-py2.py3-none-any.whl (484kB)
    100% |################################| 487kB 120kB/s
Installing collected packages: pytz, django


Successfully installed django-1.11.5 pytz-2017.2

C:UsersTLCB>


C:UsersTLCB>pip install --upgrade pip
You are using pip version 6.0.8, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting pip from https://pypi.python.org/packages/b6/ac/7015eb97dc749283ffdec
1c3a88ddb8ae03b8fad0f0e611408f196358da3/pip-9.0.1-py2.py3-none-any.whl#md5=297db
d16ef53bcef0447d245815f5144
  Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)
    19% |######                          | 245kB 188kB/s eta 0:00:06



11.4 项目和应用:

11.4.1 在Django中创建项目:

项目目录:
D:Django

D:Django>django-admin.py startproject mysite


在Django中,基本的项目含有4个文件,分别是__init__.py,manager,py,setting.py,urls.py


Django 项目文件

文件名                              描述/用途
__init__.py                         告诉Python这是一个软件包

urls.py                              全局URL配置("URLconf")

settings.py                          项目相关配置

manage.py                            应用的命令行接口

读者会注意到,startproject命令创建的每个文件都是纯Python源码文件,没有.init文件,

XML数据,或其他配置语法。


11.4.2  运行开发服务器:

到目前为止,还没有创建一个引用。尽管如此,已经可以使用一些Django功能了。

其中一个最方便的是Django内置的WEB服务器,该服务器运行在本地,专门用于开发阶段。

通过项目中的manager.py工具,可以使用下面这个简单的命令运行开发服务器。

D:Djangomysite>python ./manage.py runserver
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.
September 15, 2017 - 10:54:06
Django version 1.11.5, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.





11.5 “Hello World” 应用(一个博客)

既然拥有了一个项目,就可以在其中创建应用。为了创建一个博客应用,继续使用manage.py


D:Djangomysite>manage.py startapp blog

D:Djangomysite>dir
 驱动器 D 中的卷是 软件
 卷的序列号是 000E-FB99

 D:Djangomysite 的目录

2017/09/15  11:00    <DIR>          .
2017/09/15  11:00    <DIR>          ..
2017/09/15  11:00    <DIR>          blog
2017/09/15  10:54             3,072 db.sqlite3
2017/09/15  10:15               826 manage.py
2017/09/15  10:54    <DIR>          mysite
               2 个文件          3,898 字节
               4 个目录  4,784,971,776 可用字节

D:Djangomysite>


D:Djangomysitelog 的目录

017/09/15  11:00    <DIR>          .
017/09/15  11:00    <DIR>          ..
017/09/15  11:00               134 admin.py
017/09/15  11:00               156 apps.py
017/09/15  11:00    <DIR>          migrations
017/09/15  11:00               128 models.py
017/09/15  11:00               131 tests.py
017/09/15  11:00               134 views.py
017/09/15  11:00                 0 __init__.py
              6 个文件            683 字节
              3 个目录  4,784,971,776 可用字节

:Djangomysitelog>


表11-2 Django 应用文件:

文件名                        描述/目的

__init__.py                    告诉Python这是一个包


urls.py                        应用的URL配置文件("URLconf"),这个文件并不像项目的URLconf那样自动创建


models.py                      数据模型


views.py                       视图函数(即MVC中的控制器)


为了让Django知道这个新的应用是项目的一部分,需要编辑settings.py(可以将其理解为配置文件)。


使用编辑器打开这个文件,找到位于底部的 INSTALLED_APPS 这个元组。


将应用名称(blog)添加到元组的末尾,如下所示:




# Application definition

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


11.6 创建模型来添加数据库服务:

现在接触到了基于Django的博客系统的核心:models.py 文件。

在这里讲定义博客的数据结构,遵循的规则是"不要自我重复"

据模型表示将会存储在数据库每条记录中的数据类型。Django 提供了许多字段,用来
将数据映射到应用中。在这个应用中,将使用三个不同的字段类型(参见下面的示例代码)。
使用编辑器打开 models.py,在文件中已存在的 import 语句后面直接添加下面的模型类。
# models.py
from django.db import models
class BlogPost(models.Model):
title = models.CharField(max_length=150)
body = models.TextField()
timestamp = models.DateTimeField()



# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
class BlogPost(models.Model):
      title = models.CharField(max_length=150)
      body = models.TextField()
      timestamp = models.DateTimeField()

这是一个完整的模型,表示一个"博文"对象,其中含有三个字段(更准确地说,其中包含四个字段,

还有一个Django默认会自动创建的字段,该字段可以自动递增,且每个模型中唯一的)

现在来看刚刚创建的BlogPost类,这是django.db.models.Model的子类。

Model的Django中用于数据模型的标准基类,这是Django强大的orm核心


class BlogPost(models.Model):
      title = models.CharField(max_length=150)
      body = models.TextField()
      timestamp = models.DateTimeField()

对于这个应用,使用CharField作为博文的title,并限制了该字段的最大长度。

CharField 可用于较短的单行文本,对于较长的文本,如博文的正文,使用TextField类型。

最后,timestamp 使用DateTimeField。 DateTimeField 使用Python的datetime.datetime 对象表示。


这些字段类同样定义在在django.db.models中,其中还要其他字段类型,

11.6.1  设置数据库

  如果还没有安装并运行一个数据库服务器,则强烈建议使用易用方便的SQLite
  
  
  使用MySQL:
  
  有了空的数据库后,剩下的就是通知Django来使用它,此时需要再次用到项目的settings.py文件。
  
  关于数据库,有6个相关的设置(虽然这里可能只会用到两个):
  
  ENGINE、
NAME、HOST、PORT、USER 和 PASSWORD。

从名称就能明显地看出其中的用途,这里只须在相关设置选项后面填上需要让Django使用的数据库服务器中合适的值即可。

11.6.2 创建表:

 现在需要通知Django 使用上面给出的连接信息来连接数据库,设置应用程序需要的表。
 
 需要使用manage.py 和其中的syncdb命令,如下所示:
 
 D:Djangomysite>manage.py syncdb



>>> import django
>>> django.__version__
'1.11.5'
>>>
在django1.9后的版本中,python manage.py syncdb命令修改为python manage.py migrate,执行正常。

D:Djangomysite>python manage.py migrate
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

D:Djangomysite>

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

Django 会查找INSTALLED_APPS中列出的应用的models.py 文件。

对于每个找到的模型,它会创建一个数据库表。

11.7 Python 应用shell

Python 用户都知道交互式解释器的强大之处,Django 的创建者也不例外,它们将其集成进了Django中。

11.7.1 在Django中使用Python shell:

manage.py shell


11.8 Django 管理应用:

自动后台管理应用,或简称admin,被誉为Django皇冠上的明珠。

尽管Django 自带这个admin应用,但依然需要在配置文件中明确启用这个应用。就如同之前启动blog应用一样,

打开settings.py  


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

既然admin设置完成,所要做的就是给定一个URL,这样才能访问admin页面。在自动生成的项目urls.py中,

可以在顶部发现如下内容:

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

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]
http://127.0.0.1:8000/admin/login/?next=/admin/

取消这三行的注释并保存文件。现在当用户访问 Web 站点的 http://localhost:8000/admin
链接时,Django 就能载入默认的 admin 页面,
最后,应用程序需要告知 Django 哪个模型需要在 admin 页面中显示并编辑。为了做到这
一点,只须注册 BlogPost。创建 blog/admin.py,向其中添加下面的代码。
# admin.py
from django.contrib import admin
from blog import models
admin.site.register(models.BlogPost)
前两行导入了 admin 和数据模型。紧接着用 admin 注册 BlogPost 类。这样 admin 就可以
管理数据库中这种类型的对象(以及其他已经注册的对象)

设置admin密码:

D:Djangomysite>manage.py createsuperuser
Username (leave blank to use 'tlcb'): admin
Email address: admin@163.com
Password:
Password (again):
The password is too similar to the email address.
This password is too short. It must contain at least 8 characters.
This password is too common.
Password:
Password (again):
This password is too short. It must contain at least 8 characters.
Password:
Password (again):
Superuser created successfully.

D:Djangomysite>
D:Djangomysite>




如果表不存在,blog_blogpost 不存在

检查有没有将app加到settings里面的INSTALLED_APPS里,

执行python manage.py makemigrations 声称migrations文件,

然后再执行python manage.py migrate





Linux 上安装:
node2:/django/mysite#python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
Unhandled exception in thread started by <function wrapper at 0x22edb18>
Traceback (most recent call last):
  File "/usr/local/python27/lib/python2.7/site-packages/django/utils/autoreload.py", line 227, in wrapper
    fn(*args, **kwargs)
  File "/usr/local/python27/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 128, in inner_run
    self.check_migrations()
  File "/usr/local/python27/lib/python2.7/site-packages/django/core/management/base.py", line 422, in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
  File "/usr/local/python27/lib/python2.7/site-packages/django/db/migrations/executor.py", line 20, in __init__
    self.loader = MigrationLoader(self.connection)
  File "/usr/local/python27/lib/python2.7/site-packages/django/db/migrations/loader.py", line 52, in __init__
    self.build_graph()
  File "/usr/local/python27/lib/python2.7/site-packages/django/db/migrations/loader.py", line 209, in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "/usr/local/python27/lib/python2.7/site-packages/django/db/migrations/recorder.py", line 65, in applied_migrations
    self.ensure_schema()
  File "/usr/local/python27/lib/python2.7/site-packages/django/db/migrations/recorder.py", line 59, in ensure_schema
    raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf1 in position 6: ordinal not in range(128)

node2:/django/mysite#python manage.py runserver
Unhandled exception in thread started by <function wrapper at 0x37286e0>
Traceback (most recent call last):
  File "/usr/local/python27/lib/python2.7/site-packages/django/utils/autoreload.py", line 227, in wrapper
    fn(*args, **kwargs)
  File "/usr/local/python27/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 117, in inner_run
    autoreload.raise_last_exception()
  File "/usr/local/python27/lib/python2.7/site-packages/django/utils/autoreload.py", line 250, in raise_last_exception
    six.reraise(*_exception)
  File "/usr/local/python27/lib/python2.7/site-packages/django/utils/autoreload.py", line 227, in wrapper
    fn(*args, **kwargs)
  File "/usr/local/python27/lib/python2.7/site-packages/django/__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/local/python27/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
    app_config.import_models()
  File "/usr/local/python27/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/local/python27/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/usr/local/python27/lib/python2.7/site-packages/django/contrib/auth/models.py", line 4, in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "/usr/local/python27/lib/python2.7/site-packages/django/contrib/auth/base_user.py", line 52, in <module>
    class AbstractBaseUser(models.Model):
  File "/usr/local/python27/lib/python2.7/site-packages/django/db/models/base.py", line 124, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/usr/local/python27/lib/python2.7/site-packages/django/db/models/base.py", line 330, in add_to_class
    value.contribute_to_class(cls, name)
  File "/usr/local/python27/lib/python2.7/site-packages/django/db/models/options.py", line 214, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/usr/local/python27/lib/python2.7/site-packages/django/db/__init__.py", line 33, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/usr/local/python27/lib/python2.7/site-packages/django/db/utils.py", line 211, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/usr/local/python27/lib/python2.7/site-packages/django/db/utils.py", line 115, in load_backend
    return import_module('%s.base' % backend_name)
  File "/usr/local/python27/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/usr/local/python27/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 30, in <module>
    'Did you install mysqlclient or MySQL-python?' % e
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb.
Did you install mysqlclient or MySQL-python?


安装:
node2:/django/mysite#pip install MySQL-python
Collecting MySQL-python

node2:/django/mysite#python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
August 18, 2017 - 00:30:45
Django version 1.11, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

ango之允许外部机器访问
开开启django时,使用0.0.0.0:xxxx,作为ip和端口例如:

python3 manage.py runserver 0.0.0.0:9000

然后在settings里修改ALLOWED_HOSTS = [],

改为ALLOWED_HOSTS = ['*',],注意不要漏掉“,”。

其他机器就可以通过这台机器的ip和端口号访问django了。

例如:http://192.168.14.40:9000/index.html

11.5 "Hello World"应用(一个博客):

既然拥有了一个项目,就可以在其中创建应用。为了创建一个博客应用


node2:/django/mysite#./manage.py startapp blog
node2:/django/mysite#ls
blog  db.sqlite3  manage.py  mysite


为了让Djando知道这个新的应用是项目的一部分,需要编辑settings.py(可以将其理解为配置文件).

使用编辑器打开这个文件,找到位于底部的INSTALLED_APPS 这个元组。将
应用名称(blog)添加到元组的末尾,如下所示。

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


虽然结尾的逗号不是必须的,但如果今后向该元组中添加其他项,就无须添加逗号。

Django 使用INSTALLED_APPS来配置系统的不同部分,包括自动管理应用程序和测试框架。



11.6 创建模型来添加数据库服务:

 现在接触到了基于Django的博客系统的核心:models.py文件,在这里讲定义博客的数据结构。
 
 遵循的规则是"不要自我重复"
 
 node2:/django/mysite/blog#
node2:/django/mysite/blog#cat models.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
# models.py
from django.db import models
class BlogPost(models.Model):
    title = models.CharField(max_length=150)
    body = models.TextField()
    timestamp = models.DateTimeField()
	
	
这是一个完整的模型,表示一个博文对象,其中含有3个字段(更准确地说,其中含有四个字段,

还有一个是Django默认会自动创建的字段,该字段可以自动递增,且每个模块是唯一的

11.6.1 设置数据库:

使用MySQL:

有了空的数据库后,剩下的就是通知Django来使用它,此时需要再次用项目中的settings.py文件
# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'testdb',
'USER': 'root',
'PASSWORD': '1234567',
'HOST': '192.168.137.3',
'PORT': '3306',
}
}


11.6.2 创建表:


检查有没有将app加到settings里面的INSTALLED_APPS里,

执行python manage.py makemigrations 声称migrations文件,

然后再执行python manage.py migrate
node2:/django/mysite#python manage.py makemigrations 
Migrations for 'blog':
  blog/migrations/0001_initial.py
    - Create model BlogPost
	
node2:/django/mysite#python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, blog, 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 blog.0001_initial... OK
  Applying sessions.0001_initial... OK	


创建用户:

设置admin密码:

D:Djangomysite>manage.py createsuperuser
Username (leave blank to use 'tlcb'): admin
Email address: admin@163.com
Password:
Password (again):
The password is too similar to the email address.
This password is too short. It must contain at least 8 characters.
This password is too common.
Password:
Password (again):
This password is too short. It must contain at least 8 characters.
Password:
Password (again):
Superuser created successfully.

11.8 Django 管理应用:

11.8.1 设置admin

尽管Djamgo自带这个admin应用,但依然需要在配置文件中明确启用这个应用。就如同之前启动blog应用一样

node2:/django/mysite/blog#cat admin.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.contrib import admin

# Register your models here.
# admin.py
from django.contrib import admin
from blog import models
admin.site.register(models.BlogPost)

Select blog post to change

    Add blog post

Action:
0 of 3 selected
	
Blog post
	BlogPost object
	BlogPost object
	BlogPost object


情况变的更糟糕了,现在所有的博文都使用了“BlogPost object”标签。









Select blog post to change

    Add blog post

Action:
0 of 4 selected
	
Title
	
Timestamp
	rrrrr	Sept. 15, 2017, 9:40 a.m.
	5353	Sept. 15, 2017, 9:36 a.m.
	aaaaaaaaaaa	Sept. 15, 2017, 9:35 a.m.
	工作登记	Sept. 15, 2017, 9:30 a.m.

4 blog posts 


11.9 创建博客的用户界面:

原文地址:https://www.cnblogs.com/hzcya1995/p/13349536.html