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