3 项目开发 - 数据库

Posted 栗子测试

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3 项目开发 - 数据库相关的知识,希望对你有一定的参考价值。

1 环境安装

  • 新建虚拟环境:mkvirtualenv mxonline

  • 查看已安装:pip list

  • django安装:pip install django==1.9

  • django离线安装:下载个django压缩包,workon XX 进入虚拟环境,进入解压包执行 python setup.py install

  • 安装mysql驱动:pip install MySQL_python-1.2.5-cp27-none-win_amd64.whl

2 新建项目

  • 虚拟环境位置 C:\\Users\\Aaron\\Envs\\mxonline\\Scripts\\python.exe

  •  数据库设置

1 DATABASES = {
2     \'default\': {
3         \'ENGINE\': \'django.db.backends.mysql\',
4         \'NAME\': \'XX\',
5         \'USER\': \'root\',
6         \'PASSWORD\': \'\',
7         \'HOST\': \'127.0.0.1\'
8     }
9 }
  • 新建数据库

  • 生成django默认表

  1. 首先执行:Tools > Run manage.py Task 

  2. makemigrations

  3. migrate

  •  启动服务并访问

 3 新建APP

  • 新建app

  1. 首先执行:Tools > Run manage.py Task 

  2. startapp users

  • 编写users的models

 

 1 #_*_ encoding:utf-8 _*_
 2 from __future__ import unicode_literals
 3 from datetime import datetime
 4 
 5 from django.db import models
 6 from django.contrib.auth.models import AbstractUser
 7 
 8 
 9 class UserProfile(AbstractUser):
10     nick_name = models.CharField(max_length=50, verbose_name=u\'昵称\', default=\'\')
11     birday = models.DateField(verbose_name=u\'生日\', null=True, blank=True)
12     gender = models.CharField(max_length=6, choices=((\'male\', u\'\'), (\'female\', u\'\')), default=\'female\')
13     address = models.CharField(max_length=100, default=u\'\')
14     mobile = models.CharField(max_length=11, null=True, blank=True)
15     image = models.ImageField(upload_to=\'image/%Y/%m\', default=u\'image/default.png\', max_length=100)
16 
17     class Meta:
18         verbose_name = u\'用户信息\'
19         verbose_name_plural = verbose_name
20 
21     def __unicode__(self):
22         return self.username
23 
24 
25 class EmailVerifyRecord(models.Model):
26     code = models.CharField(max_length=20, verbose_name=u\'验证码\')
27     email = models.EmailField(max_length=50, verbose_name=u\'邮箱\')
28     send_type = models.CharField(max_length=10, choices=((\'register\', u\'注册\'), (\'forget\', u\'忘记密码\')))
29     send_time = models.DateTimeField(default=datetime.now)
30 
31     class Meta:
32         verbose_name = u\'邮箱验证码\'
33         verbose_name_plural = verbose_name
34 
35 
36 class Banner(models.Model):
37     title = models.CharField(max_length=100, verbose_name=u\'标题\')
38     image = models.ImageField(max_length=100, upload_to=\'banner/%Y/%m\', verbose_name=u\'轮播图\')
39     url = models.URLField(max_length=200, verbose_name=u\'访问地址\')
40     index = models.IntegerField(default=100, verbose_name=u\'顺序\')
41     add_time = models.DateTimeField(default=datetime.now, verbose_name=u\'添加时间\')
42 
43     class Meta:
44         verbose_name = u\'轮播图\'
45         verbose_name_plural = verbose_name

 

  • 注册app
1 INSTALLED_APPS = [
2     \'django.contrib.admin\',
3     \'django.contrib.auth\',
4     \'django.contrib.contenttypes\',
5     \'django.contrib.sessions\',
6     \'django.contrib.messages\',
7     \'django.contrib.staticfiles\',
8     \'users\'
9 ]
  • 重载一个setting的方法

 1 AUTH_USER_MODEL = \'users.UserProfile\' 

  • 安装Pillow

  1. 错误信息:users.UserProfile.image: (fields.E210) Cannot use ImageField because Pillow is not installed.

  2. 安装:pip install Pillow

  • 生成users app的表

  1. 首先执行:Tools > Run manage.py Task 

  2. makemigrations users

  3. migrate users

  • 新建app

  1. 首先执行:Tools > Run manage.py Task 

  2. startapp courses

  • 编写courses的models

 1 #_*_ encoding:utf-8 _*_
 2 from __future__ import unicode_literals
 3 from datetime import datetime
 4 
 5 from django.db import models
 6 
 7 
 8 class Course(models.Model):
 9     name = models.CharField(max_length=50, verbose_name=u\'课程名称\')
10     desc = models.CharField(max_length=300, verbose_name=u\'课程描述\')
11     detail = models.TextField(verbose_name=u\'课程详情\')
12     degree = models.CharField(max_length=2, choices=((\'cj\',\'初级\'), (\'zj\',\'中级\'), (\'gj\',\'高级\')))
13     learn_times = models.IntegerField(default=0, verbose_name=u\'学习时长(分钟)\')
14     students = models.IntegerField(default=0, verbose_name=u\'学习人数\')
15     fav_nums = models.IntegerField(default=0, verbose_name=u\'收藏人数\')
16     image = models.ImageField(max_length=100, upload_to=\'courses/%Y/%m\', verbose_name=u\'封面图\')
17     click_nums = models.IntegerField(default=0, verbose_name=u\'点击数\')
18     add_time = models.DateTimeField(default=datetime.now, verbose_name=u\'添加时间\')
19 
20     class Meta:
21         verbose_name = u\'课程\'
22         verbose_name_plural = verbose_name
23 
24 
25 class Lesson(models.Model):
26     course = models.ForeignKey(Course, verbose_name=u\'课程\')
27     name = models.CharField(max_length=100, verbose_name=u\'章节名\')
28     add_time = models.DateTimeField(default=datetime.now, verbose_name=u\'添加时间\')
29 
30     class Meta:
31         verbose_name = u\'章节\'
32         verbose_name_plural = verbose_name
33 
34 
35 class Video(models.Model):
36     lesson = models.ForeignKey(Course, verbose_name=u\'章节\')
37     name = models.CharField(max_length=100, verbose_name=u\'视频名\')
38     add_time = models.DateTimeField(default=datetime.now, verbose_name=u\'添加时间\')
39 
40     class Meta:
41         verbose_name = u\'视频\'
42         verbose_name_plural = verbose_name
43 
44 
45 class CourseResource(models.Model):
46     course = models.ForeignKey(Course, verbose_name=u\'课程\')
47     name = models.CharField(max_length=100, verbose_name=u\'资源名称\')
48     download = models.FileField(max_length=100, upload_to=\'course/resource/%Y/%m\', verbose_name=u\'资源文件\')
49     add_time = models.DateTimeField(default=datetime.now, verbose_name=u\'添加时间\')
50 
51     class Meta:
52         verbose_name = u\'课程资源\'
53         verbose_name_plural = verbose_name
  • 新建app

  1. 首先执行:Tools > Run manage.py Task 

  2. startapp organization

  • 编写organization的models

 1 #_*_ encoding:utf-8 _*_
 2 from __future__ import unicode_literals
 3 from datetime import datetime
 4 
 5 from django.db import models
 6 
 7 
 8 class CityDict(models.Model):
 9     name = models.CharField(max_length=20, verbose_name=u\'城市\')
10     desc = models.CharField(max_length=200, verbose_name=u\'描述\')
11     add_time = models.DateTimeField(default=datetime.now)
12 
13     class Meta:
14         verbose_name = u\'城市\'
15         verbose_name_plural = verbose_name
16 
17 
18 class CourseOrg(models.Model):
19     name = models.CharField(max_length=50, verbose_name=u\'机构名称\')
20     desc = models.TextField(verbose_name=u\'机构描述\')
21     click_nums = models.IntegerField(default=0, verbose_name=u\'点击数\')
22     fav_nums = models.IntegerField(default=0, verbose_name=u\'收藏数\')
23     image = models.ImageField(upload_to=\'org/%Y/%m\', verbose_name=u\'封面图片\')
24     address = models.CharField(max_length=150, verbose_name=u\'机构地址\')
25     city = models.ForeignKey(CityDict, verbose_name=u\'所在城市\')
26     add_time = models.DateTimeField(default=datetime.now)
27 
28     class Meta:
29         verbose_name = u\'课程机构\'
30         verbose_name_plural = verbose_name
31 
32 
33 class Teacher(models.Model):
34     org = models.ForeignKey(CourseOrg, verbose_name=u\'所属机构\')
35     name = models.CharField(max_length=50, verbose_name=u\'教师名\')
36     work_years = models.IntegerField(default=0, verbose_name=u\'工作年限\')
37     work_company = models.CharField(max_length=50, verbose_name=u\'就职公司\')
38     points = models.CharField(max_length=50, verbose_name=u\'教学特点\')
39     click_nums = models.IntegerField(default=0, verbose_name=u\'点击数\')
40     fav_nums = models.IntegerField(default=0, verbose_name=u\'收藏数\')
41     add_time = models.DateTimeField(default=datetime.now)
42 
43     class Meta:
44         verbose_name = u\'教师\'
45         verbose_name_plural = verbose_name
  • 新建app

  1. 首先执行:Tools > Run manage.py Task 

  2. startapp operation

  • 编写operation的models

 1 #_*_ encoding:utf-8 _*_
 2 from __future__ import unicode_literals
 3 from datetime import datetime
 4 
 5 from django.db import models
 6 
 7 from users.models import UserProfile
 8 from courses.models import Course
 9 
10 
11 class UserAsk(models.Model):
12     name = models.CharField(max_length=20, verbose_name=u\'姓名\')
13     mobile = models.CharField(max_length=11, verbose_name=u\'手机\')
14     course_name = models.CharField(max_length=50, verbose_name=u\'课程名\')
15     add_time = models.DateTimeField(datetime.now, verbose_name=u\'添加时间\')
16 
17     class Meta:
18         verbose_name = u\'用户咨询\'
19         verbose_name_plural = verbose_name
20 
21 
22 class CourseComments(models.Model):
23     user = models.ForeignKey(UserProfile, verbose_name=u\'用户\')
24     course = models.ForeignKey(Course, verbose_name=u\'课程\')
25     comments = models.CharField(max_length=200, verbose_name=u\'评论\')
26     add_time = models.DateTimeField(default=datetime.now, verbose_name=u\'添加时间\')
27 
28     class Meta:
29         verbose_name =u\'课程评论\'
30         verbose_name_plural = verbose_name
31 
32 
33 class UserFavorite(models.Model):
34     user = models.ForeignKey(UserProfile, verbose_name=u\'用户\')
35     fav_id = models.IntegerField(default=0, verbose_name=u\'数据id\')
36     fav_type = models.IntegerField(default=0, choices=((1,\'课程\'), (2,\'课程机构\'), (3,\'讲师\')), verbose_name=u\'收藏类型\')
37     add_time = models.DateTimeField(default=datetime.now, verbose_name=u\'添加时间\')
38 
39     class Meta:
40         verbose_name =u\'用户收藏\'
41         verbose_name_plural = verbose_name
42 
43 
44 class UserMessage(models.Model):
45     user = models.IntegerField(default=0, verbose_name=u\'接收用户\')
46     messae = models.CharField(max_length=500, verbose_name=u\'消息内容\')
47     has_read = models.BooleanField(default=False, verbose_name=u\'是否已读\')
48     add_time = models.DateTimeField(default=datetime.now, verbose_name=u\'添加时间\')
49 
50     class Meta:
51         verbose_name =u\'用户消息\'
52         verbose_name_plural = verbose_name
53 
54 
55 class UserCourse(models.Model):
56     user = models.ForeignKey(UserProfile, verbose_name=u\'用户\')
57     course = models.ForeignKey(Course, verbose_name=u\'课程\')
58     add_time = models.DateTimeField(default=datetime.now, verbose_name=u\'添加时间\')
59 
60     class Meta:
61         verbose_name =u\'用户课程\'
62         verbose_name_plural = verbose_name
  • 注册app
 1 INSTALLED_APPS = [
 2     \'django.contrib.admin\',
 3     \'django.contrib.auth\',
 4     \'django.contrib.contenttypes\',
 5     \'django.contrib.sessions\',
 6     \'django.contrib.messages\',
 7     \'django.contrib.staticfiles\',
 8     \'users\',
 9     \'course\',
10     \'organization\',
11     \'operation\'
12 ]
  •  生成数据表

  1. 执行命令:makemigrations

  2. 执行命令:migrate

4 合并APPS

  • 新建apps

    新建python package,名为apps 

  • Mark Directory as > Source Root

  • 配置setting文件,把apps文件夹加入到python的搜索路径下

1 import os
2 import sys
3 # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
4 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
5 sys.path.insert(0, os.path.join(BASE_DIR, \'apps\'))

以上是关于3 项目开发 - 数据库的主要内容,如果未能解决你的问题,请参考以下文章

python 用于数据探索的Python代码片段(例如,在数据科学项目中)

Xcode 快速开发 代码块

10个JavaScript代码片段,使你更加容易前端开发。

10个JavaScript代码片段,使你更加容易前端开发。

Sublime Text3自定义代码片段

VSCode自定义代码片段3——url大全