天天生鲜Django项目——①项目建立及前期步骤

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'))

所遇错误无非连接数据库、配置文件不同、编写模型类几种,以上均已解决。

只是解决问题,但其本质还未明白,希望大家互相探讨、答疑解惑。

原文地址:https://www.cnblogs.com/xiaotaiyangi/p/10843385.html