b站視頻連接:https://www.bilibili.com/video/av41733850/
視頻所用django1.8版本,但本人使用django2.2,故寫下這篇文章記錄所遇錯誤及步驟。
虛擬環境建立:mkvirtualenv 虛擬環境名
#虛擬環境一般自動生成在C:\Users\電腦用戶名\Envs目錄中,如需自定義設置詳情看此篇文章:https://blog.csdn.net/godot06/article/details/81079064
整體機構:
創建項目:django-admin startproject 項目名
創建每個項目中的模塊:python manage.py startapp 名稱
設置settings文件:修改所需要的數據庫 靜態文件目錄 模板目錄
1 # BASE_DIR絕對路徑 2 sys.path.insert(0,os.path.join(BASE_DIR,'apps/')) 3 ...... 4 5 6 INSTALLED_APPS = [ 7 'django.contrib.admin', 8 'django.contrib.auth', 9 'django.contrib.contenttypes', 10 'django.contrib.sessions', 11 'django.contrib.messages', 12 'django.contrib.staticfiles', 13 'apps.user', #用戶模板 14 'apps.goods', #商品模板 15 'apps.cart', #購物車模板 16 'apps.order', #訂單模板 17 'tinymce', #富文本編輯器 18 ] 19 ....... 20 21 22 TEMPLATES = [ 23 { 24 'BACKEND': 'django.template.backends.django.DjangoTemplates', 25 'DIRS': [os.path.join(BASE_DIR,'templates')], 26 'APP_DIRS': True, 27 'OPTIONS': { 28 'context_processors': [ 29 'django.template.context_processors.debug', 30 'django.template.context_processors.request', 31 'django.contrib.auth.context_processors.auth', 32 'django.contrib.messages.context_processors.messages', 33 ], 34 }, 35 }, 36 ] 37 ..... 38 DATABASES = { 39 'default': { 40 'ENGINE': 'django.db.backends.mysql', 41 'NAME': '數據庫名', 42 'USER':'用戶名', 43 'PASSWORD':'密碼', 44 'HOST':'id地址', 45 'PORT':3306, 46 } 47 } 48 ........ 49 50 51 52 # django認證系統使用的模型類 53 AUTH_USER_MODEL = "user.User" 54 ....... 55 56 57 STATIC_URL = '/static/' 58 # 靜態目錄 59 STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')] 60 61 # 富文本編輯器配置 62 TINYMCE_DEFAULT_CONFIG = { 63 'theme': 'advanced', 64 'width': 600, 65 'height': 400, 66 }
數據庫遠程連接需要設置,詳情看這幾篇文章:
https://blog.csdn.net/qq_36242487/article/details/79813582
https://www.cnblogs.com/renshaoqi/p/10508832.html
配置項目urls,各個模塊urls,需加上app_name,例如:
from django.urls import path,re_path from apps.goods import views app_name='goods' urlpatterns = [ path(), ]
基礎配置完成,即可開始編寫代碼
編寫models模型類
需要注意的是django2.0以后需要在定義外鍵on_delete=需要寫上,不再是默認參數。
apps/user/models:
from django.db import models from django.contrib.auth.models import AbstractUser from db.base_model import BaseModel # Create your models here. class User(AbstractUser, BaseModel): '''用戶模型類''' class Meta: db_table = 'df_user' verbose_name = '用戶' # 指定模型的復數形式是什么,如果不指定Django會自動在模型名稱后加一個’s’ verbose_name_plural = verbose_name class Address(BaseModel): '''地址模型類''' user = models.ForeignKey('User', verbose_name='所屬賬戶',on_delete=models.CASCADE) receiver = models.CharField(max_length=20, verbose_name='收件人') addr = models.CharField(max_length=256, verbose_name='收件地址') zip_code = models.CharField(max_length=6, null=True, verbose_name='郵政編碼') phone = models.CharField(max_length=11, verbose_name='聯系電話') is_default = models.BooleanField(default=False, verbose_name='是否默認') class Meta: db_table = 'df_address' verbose_name = '地址' verbose_name_plural = verbose_name
編寫views視圖
apps/user/views
1 from django.shortcuts import render,redirect 2 from django.urls import reverse #from django.core.urlresolvers import reverse:Django更新到2.0后,django2.0 把原來的 django.core.urlresolvers 包 更改為了 django.urls包 3 4 5 6 from apps.user.models import User 7 import re 8 # Create your views here. 9 10 11 #/user/register 12 def register(request): 13 '''注冊頁面''' 14 if request.method == "GET": 15 #顯示注冊頁面 16 return render(request,'register.html') 17 else: 18 '''進行注冊的處理''' 19 # 接收數據 20 username = request.POST.get('user_name') 21 password = request.POST.get('pwd') 22 email = request.POST.get('email') 23 allow = request.POST.get('allow') 24 # 進行數據校驗 25 # all()方法:可迭代的元素 26 if not all([username, password, email]): 27 # 數據不完整 28 return render(request, 'register.html', {'errmas': '數據不完整'}) 29 # 校驗郵箱 30 # if not re.match(r'^[a-z0-9][\w.\-]@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$',email): 31 if not re.match(r'^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email): 32 return render(request, 'register.html', {'errmsg': "郵箱格式不正確"}) 33 if allow != 'on': 34 return render(request, 'register.html', {'errmsg': '請同意協議'}) 35 # 進行業務處理:進行用戶注冊{不同業務有着不同的處理} 36 user = User.objects.create_user(username, password, email) 37 user.is_active = 0 38 user.save() 39 # 返回應答,跳轉首頁 40 return redirect(reverse('goods:index'))
所遇錯誤無非連接數據庫、配置文件不同、編寫模型類幾種,以上均已解決。
只是解決問題,但其本質還未明白,希望大家互相探討、答疑解惑。