哈喽哈喽这里是小菜不拖延博主,最近正在学习django的一些使用,所以想做一个项目来学习,这个项目比较新,是最近才出的,因此记录自己的一些踩坑希望能帮助到开发这个项目的同学
- 技术栈:vue3(setup)+django4
python虚拟环境配置
1.安装相关包
scss
1.安装:pip install virtualenv
pip install virtualenvwrapper-win(如果不是win环境,直接安装这个即可)
2.系统变量当中新建,变量名一定要是,WORKON_HOME, 命令行输入echo %WORKON_HOME%可查看配置是否成功(系统变量需要重启才能看到)
3.验证虚拟环境是否安装成功 出现以下则成功 ps:如果出现找不到命令,则查看一下自己的python环境(where python)看看第一个python文件的script里面是否存在workon.bat
虚拟环境的基本使用
创建虚拟环境:mkvirtualenv
删除:rmvirtualenv
查看所有虚拟环境:workon
进入虚拟环境:workon 环境名字
退出虚拟环境:deactivate
ps:解决没有办法进入虚拟环境的问题,可能是powershell的原因,试一下用cmd进入文件夹再进入虚拟环境
虚拟机部分
:set number可以为文件编辑行号
mysql部分
arduino
31行bind-address:0.0.0.0
//这样就可以保证我们不止是本地连接,任意连接都可以
- mysql服务重启
service mysql restart
- 刷新权限:
flush privileges
数据库部分
创建表结构
- id:整数类型,不为空,并且自动递增生成。
- name:字符串类型,最大字符长度为255,采用utf8mb4_general_ci字符集,默认值为NULL。
- create_time:日期时间类型,存储记录的创建时间,默认值为当前时间戳。
- primary key (id):将id列设置为主键。
- engine=innodb:指定表的存储引擎为InnoDB。
- default charset=utf8mb4 collate utf8mb4_general_ci:指定表的默认字符集为utf8mb4, 默认排序规则为utf8mb4_general_ci。
SQL
create table user(
id int not null AUTO_INCREMENT,
name varchar(255) collate utf8mb4_general_ci default null,
birthday datetime default null,
mobile varchar(255) collate utf8mb4_general_ci default null,
gender varchar(255) collate utf8mb4_general_ci default null,
email varchar(255) collate utf8mb4_general_ci default null,
password varchar(255) collate utf8mb4_general_ci default null,
create_time datetime default CURRENT_TIMESTAMP,
primary key (id)
)engine=innodb default charset=utf8mb4 collate utf8mb4_general_ci;
create table user_address(
id int not null AUTO_INCREMENT,
email varchar(255) collate utf8mb4_general_ci default null,
signer_name varchar(255) collate utf8mb4_general_ci default null,
telephone varchar(255) collate utf8mb4_general_ci default null,
signer_address varchar(255) collate utf8mb4_general_ci default null,
district varchar(255) collate utf8mb4_general_ci default null,
`default` int default 0,
create_time datetime default CURRENT_TIMESTAMP,
primary key (id)
)engine=innodb default charset=utf8mb4 collate utf8mb4_general_ci;
在models当中创建表
python
from django.db import models
# Create your models here.
class Cart(models.Model):
id=models.AutoField(primary_key=True,null=False,unique=True)
sku_id=models.CharField(null=False,max_length=255,unique=True)
nums=models.IntegerField()
is_delete=models.IntegerField()
class Meta:
db_table='shooping_cart'
python
python manage.py makemigrations cart
python manage.py migrate
根据表结构创建models
python manage.py inspectdb --database default goods > apps/goods/models.py
(>:增加,>>:覆盖)
django项目启动
pyhton
django-admin startapp TestModel
# apps_shop当中创建,注意需要进入当前目录
python manage.py startapp name
解决跨域
python
# 安装软件:pip install django-cors-headers
#当中INSTALLED_APPS中进行配置
#允许所有域名跨域
CORS_ORIGIN_ALLOW_ALL=True
# 允许携带token
CORS_ALLOW_CREDENTTALS=True
```
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 注意要注释掉这一句
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
```
问题
python ../manage.py startapp cart 报错ModuleNotFoundError: No module named 'cart'
解决:因为我之前创建过cart,但是我删除了重新创建报错,在setting的apps当中删除之前写的就好
python manage.py inspectdb --database goods > apps_shop/goods/models.py 报错django.utils.connection.ConnectionDoesNotExist: The connection 'goods' doesn't exist.
解决:命令要完整,检查命令是否没有default,python manage.py inspectdb --database default goods main_menu sub_menu > apps_shop/goods/models.py
python manage.py inspectdb --database default user > apps_shop/user/models.py报错:ValueError: source code string cannot contain null bytes
解决:原因是运行过根据表生成model,但是表当中存在空字符,就导致导入之后,django程序运行会失败,此后所有的命令都会报这个错,要想解决这个问题:
python
# 1. 在运行 `python manage.py inspectdb` 命令之前,先打开 Python 命令行界面(如 Terminal 或 CMD)。
# 1. 输入以下命令以启用 Python 的 `string_escape` 编码:
import codecs
codecs.register(lambda name: codecs.lookup('unicode_escape') if name == 'string_escape' else None)