设为首页 收藏本站
查看: 710|回复: 0

[经验分享] Python Web编程(六)

[复制链接]

尚未签到

发表于 2015-4-23 05:36:16 | 显示全部楼层 |阅读模式
通过以上的学习,应该基本掌握了Django的运行机制,页面表示,URL匹配,下面即将进入数据库的操作。
我用的是MySql,在Python中的MySql库可以在http://sourceforge.net/projects/mysql-python找到。
首先需要做的就是在settings.py中配置数据库。
DATABASE_ENGINE = 'mysql'           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
DATABASE_NAME = 'pythontest'             # Or path to database file if using sqlite3.
DATABASE_USER = 'root'             # Not used with sqlite3.
DATABASE_PASSWORD = '319958'         # Not used with sqlite3.
DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.

然后在我们的test1工程下面新建一个App,命令如下:
python manage.py startapp books
它创建了一个文件夹/books,下面有三个文件,
__init__.py,models.py,views.py。
呵呵,从名字也可以看出来,MVC。
一般的来说,Model层是跟数据库紧密结合的,并基本保持一致的。
View层就是模板了,也就是表示层,它将输出页面。
Control层就是业务层了,你的逻辑如果没有特殊情况应该放到这里面。
不说废话了,在models.py里面写代码吧。
from django.db import models
class Publisher(models.Model):
    name = models.CharField(maxlength=30)
    address = models.CharField(maxlength=50)
    city = models.CharField(maxlength=60)
    state_province = models.CharField(maxlength=30)
    country = models.CharField(maxlength=50)
    website = models.URLField()
class Author(models.Model):
    salutation = models.CharField(maxlength=10)
    first_name = models.CharField(maxlength=30)
    last_name = models.CharField(maxlength=40)
    email = models.EmailField()
    headshot = models.ImageField(upload_to='/tmp')
class Book(models.Model):
    title = models.CharField(maxlength=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()
接下来需要激活和安装模型,在settings.py中找到INSTALLED_APPS,
然后将其内容修改如下:
INSTALLED_APPS = (
    #'django.contrib.auth',
    #'django.contrib.contenttypes',
    #'django.contrib.sessions',
    #'django.contrib.sites',
    'test1.books',
)
最后,用下面命令验证一下整个Project中是否存在模型错误:
python manage.py validate
很不幸,出现一个错误,由于我们在class Author中用到了图像处理,需要下在另外的库:
http://www.pythonware.com/products/pil/
下载回来安装之后,在运行验证命令,就会发现已经不存在错误了。
在模型验证正确之后,就可以执行下面语句生成建表的SQL语句了:
python manage.py sqlall books
生成的结果如下:
BEGIN;
CREATE TABLE `books_publisher` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(30) NOT NULL,
    `address` varchar(50) NOT NULL,
    `city` varchar(60) NOT NULL,
    `state_province` varchar(30) NOT NULL,
    `country` varchar(50) NOT NULL,
    `website` varchar(200) NOT NULL
);
CREATE TABLE `books_book` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `title` varchar(100) NOT NULL,
    `publisher_id` integer NOT NULL REFERENCES `books_publisher` (`id`),
    `publication_date` date NOT NULL
);
CREATE TABLE `books_author` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `salutation` varchar(10) NOT NULL,
    `first_name` varchar(30) NOT NULL,
    `last_name` varchar(40) NOT NULL,
    `email` varchar(75) NOT NULL,
    `headshot` varchar(100) NOT NULL
);
CREATE TABLE `books_book_authors` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `book_id` integer NOT NULL REFERENCES `books_book` (`id`),
    `author_id` integer NOT NULL REFERENCES `books_author` (`id`),
    UNIQUE (`book_id`, `author_id`)
);
CREATE INDEX books_book_publisher_id ON `books_book` (`publisher_id`);
COMMIT;
在MySql中执行一下上述语句,生成了四个表。
可以看出,Django的功能是很强大的。
当然,上面的命令只是生成SQL语句,Django提供了更快捷的方法,可以直接在数据库中建表:
python manage.py syncdb。
是不是有点儿心急,还没有讲到数据库操作呢。
先来试用一下吧。
运行python manage.py shell,然后输入以下代码:
from books.models import Publisher
p = Publisher(name='Apress', address='2560 Ninth St.',
        city='Berkeley', state_province='CA', country='U.S.A.',
        website='http://www.apress.com/')
p.save()
现在看一下数据库,是不是books_publisher有了一条数据?

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59681-1-1.html 上篇帖子: python网页抓取之英汉字典 下篇帖子: python dict 两种遍历方式的比较
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表