Django项目 实例 日记
来源:互联网 发布:傲剑太玄升级数据大全 编辑:程序博客网 时间:2024/05/14 04:49
参考资料:
Django documentation
Django 基础教程
涉及的python包:
django,jieba,MySqldb,json,re,urllib2/scrapy,datetime
1.创建
C:\python\Django>django-admin startproject stripC:\python\Django>cd stripC:\python\Django\strip>tree /f卷 Windows8_OS 的文件夹 PATH 列表卷序列号为 00000090 EA34:912DC:.│ manage.py│└─strip settings.py urls.py wsgi.py __init__.py
2.生成app
C:\python\Django\strip>python manage.py startapp authorC:\python\Django\strip>python manage.py startapp spot
C:\python\Django\strip>python manage.py startapp spotC:.│ manage.py│├─author│ │ admin.py│ │ models.py│ │ tests.py│ │ views.py│ │ __init__.py│ ││ └─migrations│ __init__.py│├─spot│ │ admin.py│ │ models.py│ │ tests.py│ │ views.py│ │ __init__.py│ ││ └─migrations│ __init__.py│└─strip settings.py settings.pyc urls.py wsgi.py __init__.py __init__.pyc
3.在settings中添加app
1.修改strip/settings.py
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'author', 'spot',)
2.检查与数据库的链接
C:\python\Django\strip>python manage.py shellIn [2]: from django.db import connection as connIn [3]: print conn<django.db.DefaultConnectionProxy object at 0x0000000002D90EF0>
4.分析网站中应该创建的对象实例,表。
略
5.添加数据库信息
修改strip/settings.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'smartrip', 'USER':'root', 'PASSWORD':'root', 'HOST':'', 'PORT':'', }}
6.编写app的models
author/mdoels.py
from django.db import modelsfrom django.utils import timezone# Create your models here.class user(models.Model):email = models.EmailField(default='')username = models.CharField(max_length=40,unique=True)pword = models.CharField(max_length=20)cdate = models.DateField(default=timezone.now)birth = models.DateField(default=timezone.now)mysite = models.URLField(default='')sex = models.IntegerField(default=0)intro = models.TextField(default='')def __unicode__(self):return self.username
spot/models.py
from django.db import modelsfrom django.utils import timezonefrom author.models import user# Create your models here.class spot(models.Model):spotname = models.TextField(default='')address = models.CharField(max_length=100)want_it = models.IntegerField(default=0)description = models.TextField(default='')style = models.CharField(default='',max_length=12)cover = models.TextField(default='')visited = models.IntegerField(default=0)def __unicode__(self):return self.spotnameclass photo(models.Model):photo_url = models.TextField(default='')pdate = models.DateField(default=timezone.now)ptext = models.TextField(default='')article_title = models.TextField(default='')article_link = models.TextField(default='')like_it = models.IntegerField(default=0)spot = models.ForeignKey(spot,null=True,blank=True)keyWords = models.TextField(default='')def __unicode__(self):return photo_urlclass article(models.Model):mileage = models.FloatField(default=0)day_count = models.CharField(max_length=5,null=True)click = models.IntegerField(default=0)visited = models.IntegerField(default=0)routes = models.TextField(default='')want_it = models.IntegerField(default=0)coverpic = models.TextField(default='')user = models.ForeignKey(user,null=True,blank=True)spots = models.ManyToManyField(spot,blank=True)photos = models.ManyToManyField(photo,blank=True)def __unicode__(self):return self.article_title
7.生成models
1.形成变更
C:\python\Django\strip>python manage.py makemigrationsSystem check identified some issues:WARNINGS:spot.article.photos: (fields.W340) null has no effect on ManyToManyField.spot.article.spots: (fields.W340) null has no effect on ManyToManyField.Migrations for 'spot': 0001_initial.py: - Create model article - Create model photo - Create model spot - Add field spot to photo - Add field photos to article - Add field spots to article - Add field user to articleMigrations for 'author': 0001_initial.py: - Create model user
2.查看变更的sql语句
C:\python\Django\strip>python manage.py sqlmigrate author 0001BEGIN;CREATE TABLE `author_user` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `email` varchar(254) NOT NULL, `username` varchar(40) NOT NULL UNIQUE, `pword` varchar(20) NOT NULL, `cdate` date NOT NULL, `birth` date NOT NULL, `mysite` varchar(200) NOT NULL, `sex` integer NOT NULL, `intro` longtext NOT NULL);COMMIT;
C:\python\Django\strip>python manage.py sqlmigrate spot 0001BEGIN;CREATE TABLE `spot_article` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `mileage` double precision NOT NULL, `day_count` varchar(5) NULL, `click` integer NOT NULL, `visited` integer NOT NULL, `routes` longtext NOT NULL, `want_it` integer NOT NULL, `coverpic` longtext NOT NULL);CREATE TABLE `spot_photo` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `photo_url` longtext NOT NULL, `pdate` date NOT NULL, `ptext` longtext NOT NULL, `article_title` longtext NOT NULL, `article_link` longtext NOT NULL, `like_it` integer NOT NULL, `keyWords` longtext NOT NULL);CREATE TABLE `spot_spot` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `spotname` longtext NOT NULL, `address` varchar(100) NOT NULL, `want_it` integer NOT NULL, `description` longtext NOT NULL, `style` varchar(12) NOT NULL, `cover` longtext NOT NULL, `visited` integer NOT NULL);ALTER TABLE `spot_photo` ADD COLUMN `spot_id` integer NULL;ALTER TABLE `spot_photo` ALTER COLUMN `spot_id` DROP DEFAULT;CREATE TABLE `spot_article_photos` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `article_id` integer NOT NULL, `photo_id` integer NOT NULL, UNIQUE (`article_id`, `photo_id`));CREATE TABLE `spot_article_spots` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `article_id` integer NOT NULL, `spot_id` integer NOT NULL, UNIQUE (`article_id`, `spot_id`));ALTER TABLE `spot_article` ADD COLUMN `user_id` integer NULL;ALTER TABLE `spot_article` ALTER COLUMN `user_id` DROP DEFAULT;CREATE INDEX `spot_photo_e72b53d4` ON `spot_photo` (`spot_id`);ALTER TABLE `spot_photo` ADD CONSTRAINT `spot_photo_spot_id_281298f_fk_spot_spot_id` FOREIGN KEY (`spot_id`) REFERENCES `spot_spot` (`id`);ALTER TABLE `spot_article_photos` ADD CONSTRAINT `spot_article_photos_article_id_18e821d_fk_spot_article_id` FOREIGN KEY (`article_id`) REFERENCES `spot_article` (`id`);ALTER TABLE `spot_article_photos` ADD CONSTRAINT `spot_article_photos_photo_id_51ee98db_fk_spot_photo_id` FOREIGN KEY (`photo_id`) REFERENCES `spot_photo` (`id`);CREATE INDEX `spot_article_photos_a00c1b00` ON `spot_article_photos` (`article_id`);CREATE INDEX `spot_article_photos_b4e75e23` ON `spot_article_photos` (`photo_id`);ALTER TABLE `spot_article_spots` ADD CONSTRAINT `spot_article_spots_article_id_7c4e22bc_fk_spot_article_id` FOREIGN KEY (`article_id`) REFERENCES `spot_article` (`id`);ALTER TABLE `spot_article_spots` ADD CONSTRAINT `spot_article_spots_spot_id_723f7c87_fk_spot_spot_id` FOREIGN KEY (`spot_id`) REFERENCES `spot_spot` (`id`);CREATE INDEX `spot_article_spots_a00c1b00` ON `spot_article_spots` (`article_id`);CREATE INDEX `spot_article_spots_e72b53d4` ON `spot_article_spots` (`spot_id`);CREATE INDEX `spot_article_e8701ad4` ON `spot_article` (`user_id`);ALTER TABLE `spot_article` ADD CONSTRAINT `spot_article_user_id_42c7d0d8_fk_author_user_id` FOREIGN KEY (`user_id`) REFERENCES `author_user` (`id`);COMMIT;
3.生成这些变更
C:\python\Django\strip>python manage.py migrateOperations to perform: Synchronize unmigrated apps: staticfiles, messages Apply all migrations: sessions, admin, author, spot, auth, contenttypesSynchronizing apps without migrations: Creating tables... Installing custom SQL... Installing indexes...Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... 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 author.0001_initial... OK Applying sessions.0001_initial... OK Applying spot.0001_initial... OK
4.查看mysql
C:\python\Django\strip>mysql -u root -p smartripEnter password: ****
mysql> show tables;+----------------------------+| Tables_in_smartrip |+----------------------------+| auth_group || auth_group_permissions || auth_permission || auth_user || auth_user_groups || auth_user_user_permissions || author_user || django_admin_log || django_content_type || django_migrations || django_session || spot_article || spot_article_photos || spot_article_spots || spot_photo || spot_spot |+----------------------------+16 rows in set (0.00 sec)
auth 前缀的表示django为admin自动生成的superuser表
django 前缀的表包含了变更models的历史
app名称为前缀的表就是models.py中代码的映射。
其中多对多关系ManyToManyField将被自动的映射为一张包含两种id对应信息的表
mysql> desc spot_article_photos;+------------+---------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+------------+---------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || article_id | int(11) | NO | MUL | NULL | || photo_id | int(11) | NO | MUL | NULL | |+------------+---------+------+-----+---------+----------------+3 rows in set (0.02 sec)mysql> desc spot_photo;+---------------+----------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+---------------+----------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || photo_url | longtext | NO | | NULL | || pdate | date | NO | | NULL | || ptext | longtext | NO | | NULL | || article_title | longtext | NO | | NULL | || article_link | longtext | NO | | NULL | || like_it | int(11) | NO | | NULL | || keyWords | longtext | NO | | NULL | || spot_id | int(11) | YES | MUL | NULL | |+---------------+----------+------+-----+---------+----------------+9 rows in set (0.02 sec)mysql> desc spot_article;+-----------+------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-----------+------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || mileage | double | NO | | NULL | || day_count | varchar(5) | YES | | NULL | || click | int(11) | NO | | NULL | || visited | int(11) | NO | | NULL | || routes | longtext | NO | | NULL | || want_it | int(11) | NO | | NULL | || coverpic | longtext | NO | | NULL | || user_id | int(11) | YES | MUL | NULL | |+-----------+------------+------+-----+---------+----------------+9 rows in set (0.04 sec)
5.利用django的QuerySet API编写注入数据库的脚本
1.先用shell来查看models的类的结构
其余的不给出了
6.完善表之间的m2m关系:
#coding:utf-8import osos.environ.setdefault("DJANGO_SETTINGS_MODULE", "strip.settings")import djangoif django.VERSION >= (1, 7):#自动判断版本 django.setup()import jsonimport jiebafrom author.models import *from spot.models import *for a in article.objects.all(): for p in photo.objects.filter(article_url=a.article_url): a.photos.add(p)for a in article.objects.all(): s = '' for k in a.photos.values('keyWords'): s+=','.join(json.loads(k.values()[0])) for p in spot.objects.all(): for w in jieba.cut(p.spotname,cut_all=True): if w in s: a.spots.add(p)
7.创建superuser 管理admin站点
C:\python\Django\strip>python manage.py createsuperuserUsername (leave blank to use 'zhiziyun'): wdd1Email address: 547544429@qq.comPassword:Password (again):Superuser created successfully.
8.添加models到admin中:
app/admin:
from django.contrib import admin# Register your models here.from models import spot,photo,articleclass spotadmin(admin.ModelAdmin):list_display = ('spotname','address','want_it')# filter_horizontal = ('articles',)class articleadmin(admin.ModelAdmin):list_display = ('article_title','user','want_it','routes')# filter_horizontal = ('photos','trip_days')class photoadmin(admin.ModelAdmin):list_display = ('article_title','id','keyWords')admin.site.register(spot,spotadmin)admin.site.register(article,articleadmin)admin.site.register(photo,photoadmin)
9.打开admin页面:
C:\python\Django\strip>python manage.py runserverPerforming system checks...System check identified no issues (0 silenced).August 24, 2015 - 15:53:58Django version 1.8, using settings 'strip.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CTRL-BREAK.
默认是英文环境,在strip/settings 设置语言环境:
LANGUAGE_CODE = 'zh-hans'
这是第一次看到除了代码以为的彩色页面,是不是有点小激动?呵呵,在以后的后台管理中仍然离不开它。它作为一个工具。结合QuerySet是的Django网站的后台管理变得特别的方便。
今天就到这里。
2015-08-24 16:09:56
0 0
- Django项目 实例 日记
- Django学习日记1
- Django学习日记2
- Django学习日记3
- Django 实例
- django 实例
- 使用WSGI在Apache服务器中部署Django项目实例
- django缓存优化 基于Redis缓存项目实例
- 项目日记
- Django项目
- Django 学习日记 第一天
- 第一个django,django项目
- Django项目-编写Django应用
- Django实践-简单实例
- gunicorn部署django实例
- django ajax 应用实例
- Django Model实例
- django 模型完整实例
- Spring MVC启动过程
- iOS开发 两个视图之间值传递的常用方法<三>
- hdoj 1286 找新朋友 【欧拉函数】
- Java中Integer类的方法
- 代码重用和接口重用
- Django项目 实例 日记
- BZOJ1355
- hdu 5417 Victor and Machine
- Struts2扫描jar包
- 日经社説 20150824 原油安に気を緩めず改革の好機に
- 迟来的2013年总结及算法工程师/研究员找工作总结
- C++ 与C
- HashMap源码阅读笔记
- 数据库三范式简单理解------阿冬专栏