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'))
所遇错误无非连接数据库、配置文件不同、编写模型类几种,以上均已解决。
只是解决问题,但其本质还未明白,希望大家互相探讨、答疑解惑。