Python Django-框架学习

2022-03-22 15:29:12 浏览数 (1)

去年年底接到老师任务,要开发一个兰州疫情可视化软件,这里是个小的练手项目,麻雀虽小但是五脏俱全,这里前端采用了React,数据采集用了爬虫,一些框架比如:Selenium和Scrapy,还有就是自然语言处理数据,后端按照老师的推荐采用Eve,但是由于我对于这个框架零基础,因此这里使用了Django,这里我就记录一次完整的Django的学习过程,以及自己的一个开发过程。

1.安装django,安装好了就可以使用了。

代码语言:javascript复制
pip install django 

2.创建项目 django中项目会有一些默认的文件和默认的文件夹,这里我们先打开终端,进入到一个目录(你想存放项目所在的目录),创建项目。

代码语言:javascript复制
django-admin startproject mysite
# 执行命令创建项目
创建成功创建成功
项目初始文件项目初始文件

这里我没有用Pycharm,而是用的Vscode,对比与终端创建和Pycharm创建,是有一定的区别的,但是终端创建的是标准的,他们的区别在于settings.py里面的TempLates中的'DIRS':[];

Pycharm里面配置了参数,但是默认是没有的,我们暂时可以删除。

3.文件介绍 这里我们介绍一下每个文件是用来干什么的。
代码语言:javascript复制
manage.py # 项目的管理,启动项目/创建App/数据库管理

mysite  # 项目同名的文件夹
__init__.py 
settings.py # 项目的配置文件 连接数据库...
urls.py # URL和函数的对应关系 
asgi.py # 用来接受网络请求(异步式)
wsgi.py # 用来接受网络请求(同步式)

APP

  • 项目
    • app, 用户管理 [表结构、函数、HTMl模板、CSS]
    • app, 订单管理 [表结构、函数、HTMl模板、CSS]
    • app, 后台管理 [表结构、函数、HTMl模板、CSS]
    • app, 网站 [表结构、函数、HTMl模板、CSS]
    • app, API [表结构、函数、HTMl模板、CSS] ...

这里我只创建一个APP,这里用到manage.py,在mysite目录下直接执行该命令: python manage.py startapp apptest

├── apptest │ ├── __init__.py │ ├── admin.py # 不做修改 │ ├── apps.py # 不做修改 app的启动类 │ ├── migrations # 不做修改 数据库的字段变更记录 │ │ └── __init__.py │ ├── models.py # 专门对数据库进行操作的 │ ├── tests.py # 单元测试 │ └── views.py # 函数,一般会被urls.py所调用

4.快速编写页面进行测试 确保app已经注册,这里注册一下,打开apptest文件夹,找到apps.py,找到自动创建的类。

切换到mysite目录,在settings.py进行注册。

接下来编写URL和视图函数对应关系 ——urls.py

这里view.py中并没有index函数,所以这里我们需要编写视图函数。

启动项目: 1.通过命令行启动; python manage.py runserver 2.Pycharmy内置启动方式

3.这里我们再去写一个页面,用户得访问其他的url。 url --> 函数

4.render()函数的利用 这里我们在view.py里修改一个函数,调用render()函数,使得读取html文件,并且返回给用户。 这里我们给这个文件命名为"user_list.html",render()会从app目录下的templates文件夹下读取html文件(这里我自动创建了一个文件夹),在该文件夹下面新建一个user_list.html文件。编写HTML代码。

app目录下去找templates目录下的user_list.html 根据app的注册顺序逐一去他们的templates里面去找,但是每个人写代码的规范不同,他们也可能将templates目录放在根目录下,这样会在settings.py中"DIRS = []" 会有修改:

代码语言:javascript复制
'DIRS': [os.path.join(BASE_DIR, 'templates')],

这样就会优先去项目的根目录templates目录去找,如果找不到,才会从注册app的顺序在每个目录下的templates目录中寻找。

关于静态文件: 在开发过程中,一般将图片、CSS、JS当做静态文件处理,要添加静态文件,需要首先在app文件夹下面创建static文件夹存放静态文件,比如这里放入一张图片:

这里要在static下创建多个文件夹,把图片放入img文件夹下。

这里不写成绝对路径,是为了方便以后别的项目的迁移。

这里我没有静态文件,于是略显粗糙。

5.模板语法 是指HTML中写一些占位符,由数据对这些占位符进行替换和处理

这里稍做修改:

{% for k,v in n3.items %}

  • {{ k }} = {{ v }}

{% endfor %}

视图函数的render内部: 1.读取含有模板语法的HTML文件 2.内部进行渲染(模板语法执行并替换数据) 最终得到,只包含HMTL标签的字符串 3.将渲染(替换)完成的字符串返回给用户浏览器

案例:伪联通消息中心 这里如果我不想自己添加数组,或者也不想读取数据库,我可以通过一个简单的爬虫方式为例子来请求网页,得到数据。

这里我们继续修改代码,让其在我们的页面上显现出来。

6.请求和响应

请求和响应

代码语言:javascript复制
def something(request):
    # request 是一个对象,封装了用户通过浏览器发送过来的所有请求相关数据
    # 获取用户请求方式
    print(request.method)
    # 接受参数
    print(request.GET)
    # 通过请求体中传递数据
    print(request.POST)
    # 将字符串内容返回给请求者
    # return HttpResponse("返回内容")
    # 读取HTML的内容再进行渲染(字符串替换)
    return render(request, "something.html",{ "title":"来了,gogogog" })
    # 响应重定向,让浏览器重定向到其他页面
    return redirect("https://www.shirong.ink")

案例:用户登录

这里我这么写一个登录功能,然后写一个最简单的form表单。

代码语言:javascript复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>用户登录</h1>
    <form method="post" action="/login/">
        {%  csrf_token %} 
        <input type="text" name="user" placeholder="用户名">
        <input type="password" name="passwd" placeholder="密码">
        <input type="submit" value="提交">
    </form> 
</body>
</html>

然后最重要的一句话也是比起flask和Django的一点小区别,这里要加上csrf_token,这一点很重要!!! 这是一个很重要的安全机制。

代码语言:javascript复制
{%  csrf_token %} 
{%  csrf_token %} 
{%  csrf_token %} 

这里用户除了提交的用户名和密码,还有内部隐含生成的一个值。

这里继续完善代码加上报错提示:

但是还是不够完善,这里继续修改HTML文件

这里还是不够完善,因为我把用户名和密码写死了,这个用户名和密码应该有很多,而不会只有一组,读取数据也应当从数据库去读取。这里后面慢慢完善吧,还有if-else嵌套有点多,两个else可以删除。

7.数据库操作 MySQL数据库 pymysql

代码语言:javascript复制
import pymysql

# 1.连接MySQL
conn = pymysql.connect(
    host="127.0.0.1",
    user='root',
    passwd='123456',
    port=3306,
    db='testdb',
    charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.发送指令
cursor.execute("insert into admin(username,passwd,mobile)
values('shirong','qwe666','888888')")
conn.commit()

# 3.关闭
cursor.close()
conn.close()

Django开发操作数据库更加简单,内部提供了orm框架。

这里需要安装mysqlclient。

代码语言:javascript复制
pip install mysqlclient

Django最新版本对pymysql支持不是太好,但是支持mysqlclient,这里我们用它。 这里我遇到了报错,这里直接去下载whl的包,然后把它按照自己的版本下载下来。看过一些解决方案,但是不是太给力呀,这里我使用Anaconda(更新源 更新到最新版本)

解决方案 这里给出一个看似很靠谱的解决方案,但是对我并不适用,我依然被提示报错了!!! 心痛万分!!!

ORM可以帮助我们做两件事 1.创建,修改,删除数据库中的表,(不用写SQL语句)但无法创建数据库 2.操作表中的数据 这里数据库已经创建好了。

3.Django连接数据库 在settings.py中修改配置

修改配置修改配置

这里项目涉及到实际的应用开发,这里我就不公开IP和密码了,自己填上自己的IP和密码即可。 在models.py中添加代码如下:

代码语言:javascript复制
class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()
    
    """
    create table app01_userinfo(
        id bigint auto_increment primary key
        name varchar(32),
        password varchar(64),
        age int
    )
    """

在终端执行命令:

代码语言:javascript复制
# 使用ORM创建表
python manage.py makemigrations
python manage.py migrate

注意:如果要执行上述命令,要确保自己的app已经注册。 如果要继续添加表,就在前面的modles.py中继续添加class类,编写代码即可。

0 人点赞