初学Django 使用遇到的坑

初学django 使用遇到的坑

在调整models之后,调用出错~

这里在调整完models的数据结构之后,需要删掉sqlite自动生成的db.sqlite3文件和migrations中自动生成的文件。

将数据库从sqlite替换成mysql报错

具体报错是:No module named 'MySQLdb'。

因为:python3连接MySQL不再使用MySQLdb。而是使用PyMySQL用于连接MySQL数据库。

pip  install  PyMySQL

然后在工程目录的init.py中填写下面两句话

import pymysql
pymysql.install_as_MySQLdb()

第二步:修改settings.py,配置数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', #主要是这里,将默认的sqlite3改为mysql
        'NAME': "testdjango", #数据库的名字
        'USER': "root",#数据库用户名
        'PASSWORD': "root",#数据库密码
        'HOST': "127.0.0.1",数据库地址,默认本机
        'PORT': "",数据库端口,默认3306
    }
}

Mysql中文解析乱码问题

在mysql中中文解析我们一定要检查是不是utf-8!

CREATE TABLE `mDjangoApp_heroinfo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `hname` varchar(20) NOT NULL DEFAULT '',
  `hgender` tinyint(1) NOT NULL,
  `isDelete` tinyint(1) NOT NULL,
  `hcontent` varchar(100) NOT NULL DEFAULT '',
  `hBook_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `mDjangoApp_heroinfo_hBook_id_efd3c6fa_fk_bookinfo_id` (`hBook_id`),
  CONSTRAINT `mDjangoApp_heroinfo_hBook_id_efd3c6fa_fk_bookinfo_id` FOREIGN KEY (`hBook_id`) REFERENCES `bookinfo` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

解决办法:

网上很多,但是要注意的是:(只针对mac)

1、my.cnf 的位置:是在最外层的etc中,和usr,home同级

2、my.cnf的读写权限只能是664 而不能是666!

 

修改迁移过的数据库重新迁移

我们修改field之后去更新数据库,我们依然需要执行python manage.py makemigrations命令,去修改我们Django中的数据库格式。但是命令行会提示我们去修复我们的数据库,让我们添加默认的数据。

 

DTL中的块级标签和模板标签

  • 两对花括号包围的文本(如 {{ person_name }})是变量,意思是“把指定变量的值插入这里”。

  • 一对花括号和百分号包围的文本(如 {% if ordered_warranty %})是模板标签。

    标签的定义相当宽泛:只要能让模板系统“做些事”的就是标签。

 

 

端口号被占用报错

在端口被占用时,杀死某个端口

sudo lsof -t -i tcp:8000 | xargs kill -9

 

富文本编辑器的引入

在我们项目的Django文件下输入如下命令:

python 2.7

$ sudo pip install django-tinymce

python 3

$ sudo pip3 install django-tinymce

配置流程:

1. settings.py

INSTALLED_APPS 中添加:``

 

 1 INSTALLED_APPS = [
 2     'django.contrib.admin',
 3     'django.contrib.auth',
 4     'django.contrib.contenttypes',
 5     'django.contrib.sessions',
 6     'django.contrib.messages',
 7     'django.contrib.staticfiles',
 8     'book.apps.BookConfig',    # 我的app
 9     'tinymce'    # 添加此行
10 ]

 

 

2. urls.py

在最外层的 urls.py 中添加下面代码,一定*不要*添加到各自应用 apps 下的 urls.py(如果有的话) 中:

 

1 from django.conf.urls import url, include
2 from django.contrib import admin
3 
4 urlpatterns = [
5     url(r'^admin/', admin.site.urls),
6     url(r'^tinymce/', include('tinymce.urls')),    # 添加此行
7 ]

 

 

3. models.py

这里为了举例,只写了一个字段。

1 # coding:utf-8
2 from django.db import models
3 
4 from tinymce.models import HTMLField
5 
6 class Content(models.Model):
7     content = HTMLField()

改完 models.py 后,记得做迁移

$ python manage.py makemigrations
$ python manage.py migrate

4. setting.py

1) 在 settings.py 文件最后添加:

1 TINYMCE_DEFAULT_CONFIG = {
2     'theme': 'advanced',
3     'width': 600,
4     'height': 400
5 }

注:这里的 width 和 height 只能控制在 admin 中的大小,不能控制在视图中的大小。

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Python学习)