Django框架基础搭建经验分享

Django私人具体操作

1、Python Web开发

1.1 实验介绍

​ 实验介绍了Python Web框架Django的使用,包括了框架的基础操作、ORM、模板语言、后台管理站点和建立框架时的错误操作。

1.2 实验目的

​ 通过以下小的实验可以帮助我们掌握Django框架的基础使用及使用过程中可能出现的某些错误。

1.3 资源准备

​ 安装Python开发环境。

​ 安装Pycharm/VScode等IDE工具。

​ 安装MySQL5.7数据库/华为云RDS数据库。

1.4 实验步骤

1.4.1 Django基础

步骤1 新建Django工程
  • 方法一:使用命令创建Django工程

​ 使用命令创建Django工程MyDjango:

django-admin startproject MyDjango

​ 创建完成后使用IDE打开。

  • 方法二:使用pycharm创建Django工程

​ pycharm左上角点击 文件-新建项目image

​ 点击Django,修改名称为你想命名的名称(MyDjango),并且点击下面按钮,点击Create。

image

​ 创建成功。

image

步骤2 运行django自带的服务器

​ 在命令行中输入命令:

python manage.py runserver

​ 此处可能会报错,因为其默认端口号为8000,然而腾讯音乐打开时会使用这个端口。可以关闭腾讯音乐然后重新输入命令;或者切换端口号,这个有些繁复百度上有教程,在此就不详细写了。

image

​ 处理完报错后,运行成功。

​ 在浏览器中输入http://127.0.0.1:8000/:

image

​ 成功界面。

​ 默认的IP地址为127.0.0.1,默认的端口号为8000,可以在命令后面制定ip地址和端口号。

步骤3 创建应用

​ 在命令行输入:

python manage.py startapp MyApp

​ 创建成功。

image

步骤4 第一个视图hello world

​ 在MyApp中的views.py文件中写入视图函数:

from django.http import HttpResponse
from django.shortcuts import render
# resqest请求接收HTTP请求,HttpResponse用来返回http响应
def hello(request):
    return HttpResponse("hello world")
步骤5 配置路由文件urls.py

​ 在应用MyApp中新建urls.py文件:

image

​ 写入代码:

from django.conf.urls import url

from . import views			# 导入view中的视图函数

urlpatterns = [
    url('^$', views.hello),	# 将视图函数与url进行匹配

]

​ 在Django匹配路由时有三种方式进行匹配,分别时url、path和re_path。其中path只能绝对匹配路径地址,不支持正则匹配;re_path支持正则匹配;url支持正则匹配,实际上介绍return re_path。

​ 在MyDjango中的urls.py中添加应用MyApp的urls.py地址。

#在顶部导入
from django.urls import include

path(r'',include('MyApp.urls'))	# 为了方便url的管理,将一个应用中url集中在一起

​ 运行Django工程:

python manage.py runserver

image

步骤6 模板的使用

​ 创建模板文件夹,在工程根目录下新建文件夹templates:

image

​ 在settings.py文件中添加模板文件夹路径:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

​ 为方便后续模板文件管理,对每一个应用新建一个文件:在templates文件夹中新建MyApp文件夹,并在MyApp文件夹中新建文件hello.html:

image

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>{{ hi }}</h1>
</body>
</html>

​ 创建文件编写代码后,修改MyApp下view.py中的视图函数hello。

def hello(request):
    # context 用来接收数据
    # render 将context中的数据传递至模板并填充(渲染)
    return render(request, "MyApp/hello.html", context={'hi': 'Hello world'})

​ 修改完成后重新启动服务器查看运行结果:

python manage.py runserver

image

步骤7 使用模板语言

​ 在模板中使用循环判断语句,在view.ps中添加视图函数:

def func(request):
    L = ['flask', 'django', 'web.py']
    return render(request, 'MyApp//hello.html', context={'L': L})

​ 在MyApp中urls.py中添加对应路由:

    url(r'^func$', views.func)

​ 打开hello.html文件在body标签中添加以下代码

{{ L }}<br>
        {% for num in L %}
            {% if num != 'django' %}
            {{ num }}<br>
            {% endif %}
        {% endfor %}

​ 保存后重新启动服务,在浏览器中输入http://127.0.0.1:8000/func。

image

步骤8 数据模型类

​ 在models.py中实现数据模型类Person,具备name和age属性。

from django.urls import reverse
from django.db import models
from django.contrib.auth.models import User
class Person(models.Model):

    def __str__(self):
        return self.name

    name = models.CharField(max_length=10, null=False, unique=True)  # 名称:字符型,最大长度10
    # null 表示可以使用null填充,默认为False,不能用null填充

    age = models.IntegerField(default=18)

​ 编写完成后进入settings.py文件中修改数据库配置信息:

image

连接的数据库类型
  • mysql数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',    # 数据库主机IP地址
        'PORT': 3306,   # 数据库端口
        'USER': 'root',     # 数据库用户名
        'PASSWORD': '12345678',   # 数据库用户密码
        'NAME': 'mydjango'  # 数据库名字,需要先创建好
    }
}
步骤1:安装MySQL数据库

MySQL5.7安装教程

步骤2:下载MySQL可视化工具SQLyog

SQLyog的下载、安装、破解、配置(MySQL可视化工具安装)

步骤3:SQLyog连接上MySQL

image

​ 主机地址:localhost

​ 用户名:root

​ 密码:12345678

​ 端口:3306(与SQL Sever的端口不一致)

​ 此上步骤 步骤2中连接文档内有详细步骤

步骤4:Django框架连接MySQL
运行Django工程
python manage.py runserver
运行失败!
问题:出现报错说缺少mysqlclient模块。
通过Did you install mysqlclient?寻找解决办法

django连接MySQL报错Did you install mysqlclient?_

根据此文章了解了Django连接数据库的报错原因:

Django连接 MySQL 时仍默认使用 MySQLdb 驱动,但 MySQLdb 并不支持 Python3,所以需要手动在项目中进行配置。

在Django项目中,加入以下代码。(不是App项目,该图弄错了)

image

import pymysql
pymysql.install_as_MySQLdb()

根据此文章了解了pymysql模块,但是我心里有个疑问pymysql模块和mysqlclient模块有啥区别嘞?

于是又找到了下述文章。

mysqlclient和pymysql如何选择?_gevent_waiter的使用__mysqlclient pymysql

步骤5:Django框架连接MySQL-2配置时区

在执行步骤4时,我们也想了是不是配置数据库信息错误了,于是进行数据库重配置,发现数据库的时区错误,没有修改为中国时区,应该是使得其与搭建的Django框架冲突,不过本人不确定是不是这个原因。

Django连接数据库设置中,显示错误。

初步排查,可能是pycharm的时区和MySQL时区没统一导致(Django是通过pycharm搭建的)

处理方法:

在SQLyog或者MySQL中输入(SQL语句):

SET GLOBAL time_zone='+8:00';

时区统一后尝试启动Django框架,启动成功。

  • sql_server数据库
DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',  # odbc连接固定写法
        'NAME': 'MyDjango',  # 自定义数据库连接名(必须创建数据库后才可连接上去)
        'USER': 'sa',  # 数据库连接账户
        'PASSWORD': '12345678',  # 数据库连接密码
        'HOST': '127.0.0.1',  # 数据库服务地址
        'PORT': '1434',  # 数据库连接端口
        'OPTIONS': {
            'driver': 'SQL Server Native Client 11.0',  # ODBC连接应用驱动
            'MARS_Connection': True,
        }
    }
}

本人最初是使用sql_server数据库,但是最终的admin模块不支持sql_server数据库所以修改连接为mysql数据库

不过连接操作,放在下面:

连接操作:Django连接使用SQL Server数据库(windows版)或者Django连接SQL Server数据库

查询端口号:如何查看SQL Server的端口号

登录操作:SQL Server 2008 R2用户'sa'登录失败

django框架本身不太支持SQL Server数据库,所以需要很多其他操作,最终控制效果还行,不过还是不太建议使用。

步骤9 数据迁移

​ 执行命令生成迁移文件:

python manage.py makemigrations

​ 迁移成功后会生成迁移文件:(可能没有任何反应)

image

没有反应的话在setting.py中找到INSTALLED_APPS在里面加入一段APP注册信息:

    'MyApp.apps.MyappConfig'

​ 在执行命令生成迁移文件:

image

​ 同步至数据库:

python manage.py migrate

image

​ 迁移完成后打开数据库查看生成的数据表。

image

步骤10 ORM操作

​ 通过Django中携带的shell命令行来测试ORM操作。

python manage.py shell

​ 在命令行中输入命令:

from MyApp.models import Person

Person.objects.create(name="李四",age=21)
p=Person(name="张三",age=20)
p.save()

错误:1366 Incorrect string value: ‘\xE6\x9D\x8E\xE5\x9B\x9B‘ for column ‘name‘ at row 1

在执行上述命令时,如果出现上述报错,参见 错误代码: 1366 Incorrect string value: ‘\xE6\x9D\x8E\xE5\x9B\x9B‘ for column ‘name‘ at row 1文章内容。

原因是因为数据库的字符集可能不为utf8所以出现无法识别。

image

在创建数据库时记得选中utf8

​ 执行完成后打开数据库查看插入的数据:

image

​ 继续插入以下数据:

Person.objects.create(name="王五",age=17)
Person.objects.create(name="赵六",age=19)

​ 执行ORM查询操作:all(),查询所有数据。

Person.objects.all()

​ 结果:

<QuerySet [<Person: 李四>, <Person: 张三>, <Person: 王五>, <Person: 赵六>]>

​ get():查询单一结果:

Person.objects.get(name="张三")	# <Person: 张三>

​ 过滤查询:

Person.objects.filter(id=2)	#	<QuerySet [<Person: 张三>]>

# contains表示是否包含
Person.objects.filter(name__contains="三")	#	<QuerySet [<Person: 张三>]>


# startswith、endswith以指定值开头或结尾
Person.objects.filter(name__startswith="李")	#	<QuerySet [<Person: 李四>]>
Person.objects.filter(name__endswith="三")	#	<QuerySet [<Person: 张三>]>

# isnull:是否为null,根据字段是否为null值进行查询
Person.objects.filter(name__isnull=False)
#	<QuerySet [<Person: 李四>, <Person: 张三>, <Person: 王五>, <Person: 赵六>]>

# in:是否包含在范围内
Person.objects.filter(id__in=[1,3])	#	查询id在[1,3]内的数据
# <QuerySet [<Person: 李四>, <Person: 王五>]>

# gt:大于(greater then)
Person.objects.filter(id__gt=2)	#	查询id大于2
# <QuerySet [<Person: 王五>, <Person: 赵六>]>

# lt:小于
Person.objects.filter(id__lt=2)#	查询id小于2
# <QuerySet [<Person: 李四>]>

from django.db.models import Q
# Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或
Person.objects.filter(Q(name__startswith="张")|Q(age__gt=18))
# <QuerySet [<Person: 李四>, <Person: 张三>, <Person: 赵六>]>

from django.db.models import Sum
Person.objects.aggregate(Sum("age"))	#	{'age__sum': 77}

Person.objects.all().order_by("id")
# <QuerySet [<Person: 李四>, <Person: 张三>, <Person: 王五>, <Person: 赵六>]>

#修改数据
p=Person.objects.get(name="李四")
p.name="小李"
# Person.objects.get(name="李四").update(name="小李")

#删除数据
Person.objects.get(name="王五").delete()
步骤11 Admin

​ 创建管理员账号:

python manage.py createsuperuser

​ 在创建管理员用户时,有许多安全限制:密码不能全为数字、密码长度不能低于8位、密码不能和账号一样等。

image

​ 账号:root

​ 密码:220081db

启动服务器:

python manage.py runserver

​ 启动服务进入管理页面(http://127.0.0.1:8000/admin)

image

​ 输入账号密码:

image

image

​ 界面显示为英文,修改配置文件settings.py改变语言选项。

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

​ 重新启动服务进入管理界面

image

在重复的数据库操作中会使用到的操作:

1、MySQL数据库查询

SHOW DATABASES;

image

2、MySQL数据库删除

DROP DATABASE mydjangosql;

image

posted @ 2022-05-18 10:04  林夕晨  阅读(527)  评论(0编辑  收藏  举报