Django In Ubuntu part1

1. 数据库配置

我们在项目的 settings.py 文件中找到 DATABASES 配置项,将其信息修改为:

HelloWorld/HelloWorld/settings.py: 文件代码:

1
2
3
4
5
6
7
8
9
10
11
DATABASES = {     
'default': {
'ENGINE': 'django.db.backends.mysql',
# 或者使用 mysql.connector.django
'NAME': 'test',
'USER': 'test',
'PASSWORD': 'test123',
'HOST':'localhost',
'PORT':'3306',
}
}

这里添加了中文注释,所以你需要在 HelloWorld/settings.py 文件头部添加 # -*- coding: UTF-8 -*-

上面包含数据库名称和用户的信息,它们与 MySQL 中对应数据库和用户的设置相同。Django 根据这一设置,与 MySQL 中相应的数据库和用户连接起来

Error: django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb.

Solve: python2.7 + Django1.11 , 解决方案: pip install mysql-server

1
2
3
4
5
6
7
8
9
10
11
12
root@iZwz969jm0y04abuhgx4byZ:~# pip install mysql-python
#随后验证一下是否安装成功
root@iZwz969jm0y04abuhgx4byZ:~# python
Python 2.7.12 (default, Nov 12 2018, 14:36:49)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import MYSQLdb
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named MYSQLdb
>>> import MySQLdb
>>> exit()

2. Django表单

HTML表单是网站交互性的经典方式。 本章将介绍如何用Django对用户提交的表单数据进行处理。


HTTP 请求

HTTP协议以”请求-回复”的方式工作。客户发送请求时,可以在请求中附加数据。服务器通过解析请求,就可以获得客户传来的数据,并根据URL来提供特定的服务。

GET 方法

我们在之前的项目中创建一个 search.py 文件,用于接收用户的请求:

/HelloWorld/HelloWorld/search.py 文件代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# -*- coding: utf-8 -*-

from django.http import HttpResponse
from django.shortcuts import render_to_response

# 表单
def search_form(request):
return render_to_response('search_form.html')

# 接收请求数据
def search(request):
request.encoding='utf-8'
if 'q' in request.GET:
message = '你搜索的内容为: ' + request.GET['q']
else:
message = '你提交了空表单'
return HttpResponse(message)

在模板目录 templates 中添加 search_form.html 表单:

/HelloWorld/templates/search_form.html 文件代码:

<!DOCTYPE html>




菜鸟教程(runoob.com)







urls.py 规则修改为如下形式:

/HelloWorld/HelloWorld/urls.py 文件代码:

1
2
3
4
5
6
7
8
9
from django.conf.urls import url
from . import view,testdb,search

urlpatterns = [
url(r'^hello$', view.hello),
url(r'^testdb$', testdb.testdb),
url(r'^search-form$', search.search_form),
url(r'^search$', search.search),
]

访问地址 http://120.76.62.132:8000/search-form 并搜索

Error: 在Django视图函数中经常出现类似于’ascii’ codec can’t decode byte 0xef in position 0:ordinal not in range(128)的错误。

Solve: 使用同一套编码,将字符串全都转成byte string或unicode string

​ 1.将字符串全都转成byte string。
​ self.response.out.write(“你好”+self.request.get(“argu”).encode(“utf-8”))
​ 2.将字符串全都转成unicode string。
​ self.response.out.write(u”你好”+self.request.get(“argu”))
​ byte string转换成unicode string可以这样转unicode(unicodestring, “utf-8”)

python编码错误

Error: django.db.utils.ProgrammingError: (1146, u”Table’’ doesn’t exist”)解决办法

Slove: 原因:访问了数据库里不存在的表,可能是因为在model改变之后表结构没有更新

1
2
3
4
5
6
7
root@iZwz969jm0y04abuhgx4byZ:~/HelloWorld# python manage.py migrate
root@iZwz969jm0y04abuhgx4byZ:~/HelloWorld# python manage.py makemigrations TestModel
Migrations for 'TestModel':
TestModel/migrations/0002_contact_tag.py
- Create model Contact
- Create model Tag
root@iZwz969jm0y04abuhgx4byZ:~/HelloWorld# python manage.py migrate TestModel
给咱来个🍰,啾咪