前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python Django-框架学习

Python Django-框架学习

作者头像
Baige
发布2022-03-22 15:29:12
5270
发布2022-03-22 15:29:12
举报
文章被收录于专栏:世荣的博客世荣的博客

去年年底接到老师任务,要开发一个兰州疫情可视化软件,这里是个小的练手项目,麻雀虽小但是五脏俱全,这里前端采用了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类,编写代码即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022 年 01 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 请求和响应
  • 案例:用户登录
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档