• 安装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 创建博客的用户界面:

  • 相关阅读:
    Java基础——Instanceof 运算符
    算法——八皇后问题(eight queen puzzle)之回溯法求解
    浅析数据结构
    react給變量賦值并列元素
    如何使用npm构建一个react demo项目
    Java面试题 静态代码块 构造代码块 构造方法 的执行顺序
    Mysql 反向解析 导致远程访问慢
    Django admin管理工具
    Django-Ajax(85)
    jQuery快速入门
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349536.html
Copyright © 2020-2023  润新知