号称最为简明实用的Django上手教程(上)

1 几个基本概念 

 前置条件:假设读者基本Python语言基础,或者具备某种编程语言的基础。你还熟悉web开发环境,懂些css,js,db等。

Django是什么?

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。 Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don't Repeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和数据模型。

-----维基百科

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。

----百度百科

MTV开发模式?

Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下:

(1) 模型(Model),即数据存取层 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。

(2) 视图(View),即表现层 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。

(3) 模板(Template),即业务逻辑层 存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。

Django的架构?

让我们一览 Django 全貌:

urls.py 网址入口,关联到对应的views.py中的一个函数(或者generic类),访问网址就对应一个函数。

views.py 处理用户发出的请求,从urls.py中对应过来, 通过渲染templates中的网页可以将显示内容,比如登陆后的用户名,用户请求的数据,输出到网页。

models.py 与数据库操作相关,存入或读取数据时用到这个,当然用不到数据库的时候 你可以不使用。

forms.py 表单,用户在浏览器上输入数据提交,对数据的验证工作以及输入框的生成等工作,当然你也可以不使用。

templates 文件夹 views.py 中的函数渲染templates中的Html模板,得到动态内容的网页,当然可以用缓存来提高速度。

admin.py 后台,可以用很少量的代码就拥有一个强大的后台。

settings.py Django 的设置,配置文件,比如 DEBUG 的开关,静态文件的位置等。

上面的py文件不理解也没有关系,后面会详细介绍。一图胜千言,架构全貌工作机制如下所示:

Django大家都在使用的商业网站

Sohu 邮箱  、果壳网  、 豆瓣  、 爱调研 、 易度在线云办公 、 优容网  、 快玩游戏、九九房、贷帮网 、 趣奇网 、知乎、时尚时空 、游嘻板: YxPad webpy、DNSPod 国际版 、下厨房  、 贝太厨房 、 Wopus问答 、 咕咚网 、扇贝网 、站长工具、易度文档管理系统、个人租房、 在线文档查看-易度云查看 、 FIFA310 足球数据分析专家、 搜狐随身看等等。

2 Django配置准备


 前置条件:python、pip环境已经安装。

 后置条件:安装Diango,参考Django安装_grfstc的博客-CSDN博客

xxx数据统计分析(决策)平台

系统环境:WIN10 64bit
开发环境:pycharm
数据库:Mysql 5.6.17
语言:python3.10
框架:django2.2.9+Bootstrap
可视化工具:Highchart|Echarts|plotly|Bokeh(采用Echarts)

3 Django基础配置安装

 1 创建项目,项目决策分析:xmjc_analysis

在目录下创建xmjc_analysis:

django-admin startproject xmjc_analysis

导入到pycharm

 效果:

settings.py 项目的设置文件
urls.py 总的urls配置文件
wsgi.py 部署服务器文件
__init__.py python包的目录结构必须的,与调用有关。

 2 创建App名为analysis

django-admin startapp analysis

 打开pycharm的终端

 

效果:

 

 3 新定义的app加到settings.py中的INSTALL_APPS中

 4 视图和网址创建第一个页面

(1)我们在analysis这个目录中,把views.py打开,修改其中的源代码:

# coding:utf-8
from django.shortcuts import render
from django.http import HttpResponse


# index()函数,第一个参数必须是 request,与网页发来的请求有关,request 变量里面包含get或post的内容。
def index(request):
    return HttpResponse(u"欢迎进入第一个Django页面!")
# HttpResponse用来向网页返回内容的

第一行是声明编码为utf-8, 因为我们在代码中用到了中文,如果不声明就报错.

第二行引入HttpResponse,它是用来向网页返回内容的,就像Python中的 print 一样,只不过 HttpResponse 是把内容显示到网页上。

我们定义了一个index()函数,第一个参数必须是 request,与网页发来的请求有关,request 变量里面包含get或post的内容。

(2)我们打开 xmjc_analysis/xmjc_analysis/urls.py 这个文件, 修改其中的代码:

from django.conf.urls import url
from django.contrib import admin
 
from analysis import views as analysis_views
 
urlpatterns = [
    url(r'^admin/', admin.site.urls),
 
    url(r'^index/$', analysis_views.index, name='index'),   # 首页
]

 (3)本地运行服务器测试

在manage.py页面右键选择设置运行参数

IP可以设置回环地址127.0.0.1:8000或者本机ip,端口号默认为8000,可以根据自己需求设置。

 Run 'manage'

 成功运行

 打开浏览器输入地址http://127.0.0.1:8000/index/

xmjc_analysis运行结果如下:

 

 (4)页面传参数,显示欢迎‘admin’字样

修改view.py源码:

通过get方式接受页面参数,当然也可以采用post,结合form实现。效果如下:

http://127.0.0.1:8000/index/?name=admin

5 配置简单数据库操作,默认sqlite,咱们指定mysql数据库

(1)安装mysql数据库

1.下载安装包,下载地址:

MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/

 有两个下载链接, 第一个安装包比较小, 第二个安装包比较大, 因为包含调试工具, 用不到这些, 所以下载第一个

2.解压mysql-8.0.29-winx64.zip, 然后在根目录下添加一个文件my.ini, 文件内容如下, 注意将basedir改成自己的。

[mysql]
#客户端使用的字符集默认为utf8
default-character-set=utf8
[mysqld]
#设置3306端口号
port=3306
#设置MySQL的安装目录
basedir=D:\\work\\MySQL\\mysql-8.0.29-winx64
#设置MySQL数据库的数据存放目录
datadir=D:\\work\\MySQL\\mysql-8.0.29-winx64\\data
#运行最大连接数
max_connections=200
#运行连接失败的次数
max_connect_errors=10
#服务端使用的字符集默认为utf-8
character-set-server=utf8
[client]
#客户端默认端口号为3306
port=3306

 创建my.ini之后是这个样

 3.将bin目录D:\work\MySQL\mysql-8.0.29-winx64\bin添加到环境变量, 注意把这个地址改成你自己的. 这样之后就可以在命令行中使用mysql了

 

 4.以管理员身份打开cmd

5.在cmd中依次执行如下操作:

1)进入bin目录

cd d:
cd D:\work\MySQL\mysql-8.0.29-winx64\bin

2)执行

 mysqld --initialize --console

 如下图所示, 记得保存框中的密码, 用于登录root@localhost用的

3)执行

 mysqld install

 4)执行

 net start mysql

 6.现在可以在cmd中操作mysql了, 最好先修改一下密码, 否则无法执行操作, 重新打开一个cmd, 现在不需要以管理员身份打开
1)执行

mysql -uroot -p

回车后输入刚才框中的密码
2)执行

alter user root@localhost identified by 'yourPassWord';

回车后即可修改密码, 不要遗漏末尾的分号!!
3)再重新打开一个cmd, 通过

mysql -uroot -p

登录就可以正常操作了

 7.增加一个测试用户

create user 'test'@'localhost' identified by '123456';

8.增加一个test数据库

CREATE DATABASE test;

效果如下:

 9.进入test数据库给测试用户赋权:

use test
GRANT ALL ON TEST.* TO 'test'@'localhost';

(2)在xmjc_analysis/settings.py文件下修改如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'test',
        'PASSWORD': '123456',
        'HOST':'localhost',
        'PORT':'3306',
    },
}

xmjc_analysis/__init__.py下修改:

import pymysql
pymysql.install_as_MySQLdb()

(3)在analysis/models.py下设计数据库表,采用ORM方式

from django.db import models
 
# Create your models here.
class User(models.Model):
    username = models.CharField('用户名', max_length=30)
    userpass = models.CharField('密码',max_length=30)
    useremail = models.EmailField('邮箱',max_length=30)
    usertype = models.CharField('用户类型',max_length=30)
 
    def __str__(self):
        return self.username

(4) 在analysis/admin.py中定义显示数据

from django.contrib import admin
from .models import User
 
class UserAdmin(admin.ModelAdmin):
    list_display = ('username','userpass','useremail') # 自定义显示字段
 
admin.site.register(User,UserAdmin)

(5)创建更改的文件,将生成的py文件应用到数据库

python manage.py makemigrations        # 生成数据库迁移文件
python manage.py migrate               # 生成数据库表

python manage.py makemigrations 报错1:

RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods

因为没安装cryptography包,通过pip安装

pip install cryptography

python manage.py makemigrations报错2:

原因:一般是因为 str 的类型本身不是 bytes,所以不能解码。
这是由于 py2 与 py3 字符串 编码上的区别 导致的。
## 概念:
1、普通 str:可理解的语义。
2、字节流 str(bytes):0101010101,字节类型其实就是 2 进制格式,
   不过为了易于理解和计算,通常用 16 进制来表示,
   也就是 b'\xe4\xb8\...,b 开头代表是 bytes 类型。

## 语法
1、Encode(编码):把普通字符串 转为 机器可识别的 bytes。
2、Decode(解码):把bytes转为字符串。

## 语法记忆小技巧
1、编码 encode,就是把你认识的转为机器认识的。
2、解码 decode,就是把机器认识的解释为人能读懂的。

## 差异
1、py3 的 str 默认不是 bytes,所以不能 decode,只能先 encode 转为 bytes,再 decode。
2、py2 的 str 默认是 bytes,所以能 decode。

## 结论
所以 str.decode 本质是 bytes 类型的 str 的 decode
py3 经常出现 AttributeError: ‘str’ object has no attribute ‘decode’

改成encode

 解决以上两个报错,执行两条命令的结果效果如下:

 (6)创建超级管理员:用户名,test;密码密码:test123456

python manage.py createsuperuser

效果如下:

 (7)登录后台查看信息

运行服务器,Run 'manage'

登录后台url:http://127.0.0.1:8000/admin/

 输入用户名test,密码test123456

可以看到后台信息,并对数据表进行增删改查操作

但是后台全部英文,可以改为中文显示?

后台管理设置为中文显示,xmjc_analysis/settings.py下修改代码:

LANGUAGE_CODE = 'zh-Hans' # 中文显示

 再去查看:

 (8) Django 提供的 QuerySet API,shell玩转MySql

在xmjc_analysis下输入【 python manage.py shell】,然后查询数据表。

from analysis.models import User
User.objects.all()

 创建一条用户信息:

User.objects.create(username="李白", userpass="libai123",useremail="libai@163.com",usertype="超级管理员")

后台查看:

 其他操作方式:

# 方法 1
User.objects.create(username="李白", userpass="libai123",useremail="libai@163.com",usertype="超级管理员")
# 方法 2
twz =User(username="李白", userpass="libai123",useremail="libai@163.com",usertype="超级管理员")
twz.save()
# 获取对象:
Person.objects.all()
# 满足条件查询
User.objects.filter(username="李白")
# 迭代查询:
es = Entry.objects.all()
for e in es:
    print(e.headline)
# 查询排序:
User.objects.all().order_by('username')
# 链式查询:
User.objects.filter(name__contains="WeizhongTu").filter(email="tuweizhong@163.com")
# 去重查询:
qs = qs.distinct()
# 删除操作:
User.objects.all().delete()# 更新操作:
Person.objects.filter(name__contains="abc").update(name='xxx')数据的导出:
python manage.py dumpdata [appname] > appname_data.json
python manage.py dumpdata blog > blog_dump.json导出用户数据
python manage.py dumpdata auth > auth.json # 导出用户数据

 (9)批量向数据表导入数据

将name.txt导入数据库:

张一|admin|zhang1@qq.com|超级管理员
张二|admin|zhang2@qq.com|超级管理员
张三|admin|zhang3@qq.com|超级管理员
张四|admin|zhang4@qq.com|超级管理员
张五|admin|zhang5@qq.com|超级管理员
张六|admin|zhang6@qq.com|超级管理员

数据导入源码:

#!/usr/bin/env python
#coding:utf-8
#
 
 
from django.core import serializers
import json
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xmjc_analysis.settings")
 
 
'''
Django 版本大于等于1.7的时候,需要加上下面两句
import django
django.setup()
否则会抛出错误 django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
'''
 
import django
import json
if django.VERSION >= (1, 7):#自动判断版本
    django.setup()
 

# name.txt路径改成自己的路径
def main():
    from analysis.models import User
    f = open('./readme/files/name.txt',encoding='utf-8')
    for line in f:
        name,pwd,email,type = line.split('|')
        User.objects.create(username=name,userpass=pwd,useremail=email,usertype=type)
    f.close()
 
def jsondb():
    from analysis.models import User
    data = eval(serializers.serialize("json", User.objects.all())) # json
    userdata = json.dumps(data)
    print(type(userdata))
 
 
if __name__ == "__main__":
    main()
    # jsondb()
    print('插入完毕!')

 查看结果:

上篇结束,下篇尝试原作者原文章中对引用的js和css文件没有进一步说明,以及并非所有代码都包含在文章内,我未找到对应的全部引用文件导致无法完成该系统,故下篇不再更新。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值