1. 程式人生 > >3 項目開發 - 數據庫

3 項目開發 - 數據庫

啟動服務 封面 ice 點擊 blank pps default because led

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=uimage/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 項目開發 - 數據庫