Django In Ubuntu part_1

Django In Ubuntu part1

1. 数据库配置

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

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

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

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 文件代码:

# -*- 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 文件代码:

菜鸟教程(runoob.com)

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

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

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改变之后表结构没有更新

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

猜你喜欢

转载自blog.csdn.net/qq_36945033/article/details/85257605