django搭建网站记录一

环境配置

我的是python3.4 以及django1.7.5
MySQL
python和django就直接官网下载安装啥的,就不说了。

安装MySQL

win8.1 MySQL5.6.24
安装了两天各种出错,真是醉了,其中最让我崩溃的是在start service那里停住了,出现如下提示:
(我忘了截图了,这里盗用了下网上的图)
django搭建网站记录一_第1张图片
网上找了好多方法,什么卸载重装,programe data隐藏文件中的MySQL文件夹以及注册列表清除什么的都做了,重装了很多次,换了几个版本都是同样的问题,最后在stackoverflow上找到了解决方案:
参考:stackoverflow

  1. Installed it with mysql-installer-web-community-5.6.23.0.msi
  2. For my purposes I selected “Custom” install with MySQL servers 5.6.22 - X64 and MySQL Connectors -> Connector ODBC/5.3.4 - 64
  3. Next -> Execute -(ready to configure) -> Next
  4. Config type: Development machine, all defaults (TCP/IP, Port: 3306, Open firewall)
  5. Typed in MySQL Root Password
  6. MySQL user Accounts -> Add user (username, password, OK) -> Next
  7. Configure MySQL Server as a Windows Service (CHECKED)
  8. Windows Service Name: MySQL56 (default)
  9. Start the MySQL Serve at System Startup
  10. THIS IS CRUCIAL (BUG IS HERE): Run Service as… Standard System Account (CHECKED - but it will be disregarded and that is BUG)
  11. Next -> Execute, Installation hangs on Starting server, so wait for a while to time out (or don’t, your choice). When Dialog (might be covered with other windows) popup with message “Configuration of MySQL Server is taking longer than expected…, here click OK (so to wait longer)
  12. Meanwhile go to Start -> Control Panel -> Administrative Tools -> Services -> find MySQL56, right click on it -> Properties -> select Log On Tab AND HERE IS BUG -> Although Local System Account was selected, Somehow “This account: Network Service (with some password) was selected -> Select Log on as: Local System Account, Allow service to interact with desktop -> Apply -> Go back on general tab
  13. On general tab click on “Start” button to start service and here it is! Service is started! Click on OK to close MySQL56 Properties dialog. Close Services dialog. Close Administrative tools. Close control panel.
  14. And by that time (while you were closing those dialogs) when you look at MySQl Installer Dialog all steps are finished and checked: Starting Server, Applying security… Creating user accounts.. Updating Start menu link
  15. Confirm with Finish -> Next -> Finish

新建django项目和app

这里要顺便一提的是,Pycharm中自带有git功能,能与github远程库连接,非常方便多人合作的项目或者自己进行版本控制。git多人协作我之前有写过。
回归正题:
参考:JavaChen
django docment
首先在你想建工程的目录下输入命令行:

django-admin.py startproject labsite  
#新建了一个叫labsite的django项目文件

然后在目录下会有如下文件:

labsite
├── manage.py
└── labsite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

1 directory, 5 files

这些文件的含义是:

外层的labsite/根目录仅仅是项目所在的位置,它的命名和Django本身无关;你可以把它改名为任何你喜欢的名字。
manage.py:一个命令行工具,可以使你用多种方式对Django项目进行管理。你可以在django-admin.py and manage.py读到所有关于manage.py的使用细节。
内层的labsite/目录实际上是你的项目里的一个Python包。这个目录的名字就是Python包的名字。你将使用这个名字从这个Python包中导入模块或者类等等(例如labsite.urls)。
labsite/__init__.py:这是一个空文件。它告诉Python,这个目录应该被看做一个Python包。(如果你是一个Python初学者,阅读官方文档中关于包的更多知识。)
labsite/settings.py:Django项目的配置文件。Django配置将告诉你这些配置项的作用。
labsite/urls.py:这个Django项目的URL声明;你的Django站点的“目录”。你可以在URL调度中读到更多关于URLs的资料。
labsite/wsgi.py:一个WSGI兼容的Web服务器的一个入口。用来连接你的项目和相关Web服务器。查看怎样部署WSGI获得更多细节。

然后再创建一个app, 一个app相当于一个子模块,刚熟悉django的时候,我也在想如果我只开发一个简单单一功能的应用为什么不能直接在工程下建views.py文件,不用建app呢,如果不需要连接数据库,不需要建模型什么的话也是可以的。(很少吧喂(#`O′))

其实,我们可以将project理解为配置功能,它定义了数据库的连接信息,文件的基础路径等等。app常表示一个功能模块,包括模型和视图,可以被其它多个project复用,如果只需要创建一个简单的站点,一个app就足够了,当然如果不需要数据库层,直接在project里建views.py和设置URLconf也可以。
但是,系统对app有一个约定: 如果你使用了Django的数据库层(模型),你必须创建一个Django app。模型必须存放在apps中。因此,为了开始建造我们的模型,我们必须创建一个新的app。

django-admin startapp bigdata

生成的app目录如下

bigdata/
__init__.py
admin.py
migrations/
    __init__.py
models.py
tests.py
views.py

注:这篇blog主要是记录我们搭建网站的过程,具体的django教程还是建议去看django docment比较好哦( ̄_, ̄ )

配置数据库连接MySQL

之前我都是用的默认的SQLite,不需要多余的操作就可以用,但这次考虑到长远性和实际应用,还是选择用MySQL。所以需要安装对应的数据库插件。doc上推荐的MySQLdb还不支持python3,所以我用的是替代品PyMySQL。
1. 下载pyMysql并安装:

    python setup.py install

2. 在上面建好的django项目(labsite)的init.py中加入:

    import pymysql
    pymysql.install_as_MySQLdb()

3. 然后修改setting.py中的数据库配置信息:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'lab_data',       #这是你自己建的数据库表的名称
            'USER': 'sherryllll',     #如果之前没改过就是root
            'PASSWORD': '****',
            'HOST': '127.0.0.1',
            'PORT': '3306'
        }
    }

4. 检查连接状态

    python manage.py shell
    >>>from django.db import connection
    >>>cursor = connection.cursor()

如果没有报错,说明配置成功了,如果报错了,就根据错误信息修改下

模型

建立模型

django也被称为MTV框架。MTV里的M代表模型。 Django模型是用Python代码形式表述的数据在数据库中的定义。 对数据层来说它等同于 CREATE TABLE 语句,只不过执行的是Python代码而不是 SQL,而且还包含了比数据库字段定义更多的含义。 Django用模型在后台执行SQL代码并把结果用Python的数据结构来描述。 Django也使用模型来呈现SQL无法处理的高级概念。

如果你对数据库很熟悉,你可能马上就会想到,用Python 和 SQL来定义数据模型是不是有点多余? Django这样做是有下面几个原因的:

自省(运行时自动识别数据库)会导致过载和有数据完整性问题。 为了提供方便的数据访问API, Django需要以 某种方式 知道数据库层内部信息,有两种实现方式。 第一种方式是用Python明确地定义数据模型,第二种方式是通过自省来自动侦测识别数据模型。
6

第二种方式看起来更清晰,因为数据表信息只存放在一个地方-数据库里,但是会带来一些问题。 首先,运行时扫描数据库会带来严重的系统过载。 如果每个请求都要扫描数据库的表结构,或者即便是 服务启动时做一次都是会带来不能接受的系统过载。 (有人认为这个程度的系统过载是可以接受的,而Django开发者的目标是尽可能地降低框架的系统过载)。第二,某些数据库,尤其是老版本的MySQL,并未完整存储那些精确的自省元数据。

编写Python代码是非常有趣的,保持用Python的方式思考会避免你的大脑在不同领域来回切换。 尽可能的保持在单一的编程环境/思想状态下可以帮助你提高生产率。 不得不去重复写SQL,再写Python代码,再写SQL,…,会让你头都要裂了。

把数据模型用代码的方式表述来让你可以容易对它们进行版本控制。 这样,你可以很容易了解数据层 的变动情况。

SQL只能描述特定类型的数据字段。 例如,大多数数据库都没有专用的字段类型来描述Email地址、URL。 而用Django的模型可以做到这一点。 好处就是高级的数据类型带来更高的效率和更好的代码复用。

SQL还有在不同数据库平台的兼容性问题。 发布Web应用的时候,使用Python模块描述数据库结构信息可以避免为MySQL, PostgreSQL, and SQLite编写不同的CREATE TABLE。

当然,这个方法也有一个缺点,就是Python代码和数据库表的同步问题。 如果你修改了一个Django模型, 你要自己来修改数据库来保证和模型同步。Django提供了实用工具来从现有的数据库表中自动扫描生成模型。 这对已有的数据库来说是非常快捷有用的。

首先在新建的app中的models.py中输入下面的内容建立一个数据表 Members

from django.db import models

class Members(models.Model):
    name = models.CharField(max_length=30)
    identity = models.CharField(max_length=30)
    homepage = models.URLField(none=True)

激活模型

将bigdata app (之前新建的app)添加到配置文件的已安装应用列表中。即编辑setting.py文件,在INSTALL_APP中加入bigdata

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'bigdata'   #add you app name here
)

现在django已经知道了它包含了bigdata这个app,接下来要告诉django,我新建了一些新的模型,并且愿意将这些更改存储为迁移文件(保存你对模型的修改),执行命令如下:

python manage.py makemigrations bigdata

结果如图:
这里写图片描述
执行migrate命令,在数据库中创建模型对应的数据表:

python manage.py migrate

执行完后我们介入python的交互式命令行,检验下我们刚刚写入的模型:
当然在MySQL中你也可以看到刚刚新加入的Members表

    python manage.py shell

django搭建网站记录一_第2张图片
可以看到一开始表是空的,然后我添加了Sherry这个成员,存入后表中有了对象,但是注意最后一句,显示的是一个没有意义的表达方式,所以需要稍微修改下模型,在之前的Members模型定义中加入_ _ str _ _()
注:python2 是_ _ unicode _ _()

class Members(models.Model):
    #...
    def __str__(self):
        return self.name

这次显示的将是对象中的名字信息。

下面我们看看执行服务器运行命令后在网页上看到的信息吧:

python manage.py runserver

如果要让局域网中的其他电脑也可以访问就执行下面这句:

python manage.py runserver 0.0.0.0:8000

django搭建网站记录一_第3张图片
现在我们还没有开始写模板和urlConf,所以显示的是最开始的界面,后续在第二部分再讲我们是如何让界面中显示自己的内容的~

admin界面:
首先建立管理用户来登陆admin后台:

python manage.py createsuperuser

django搭建网站记录一_第4张图片
用刚刚创建的管理员用户登陆:

django搭建网站记录一_第5张图片

注意到界面上并没有显示之前创建的Members数据表,因为我们的这个表没有在admin.py中注册,也就是admin后台并不知道,所以需要在bigdata/admin.py 中修改:

from django.contrib import admin
from labsite.bigdata.models import Members


admin.site.register(Members)

现在你可以看到Members这个表啦~(≧▽≦)/~
当然为了显示的更好,如排序或者显示更多的信息而不仅仅是姓名等功能,都可以通过修改这里的代码实现。

你可能感兴趣的:(Django)