Django基础知识学习及使用

发布时间:2021-06-29 14:55:23 作者:chen
来源:亿速云 阅读:126

本篇内容主要讲解“Django基础知识学习及使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Django基础知识学习及使用”吧!

一、web框架分类和wsgiref模块使用介绍

web框架的本质

socket服务端 与 浏览器的通信

socket服务端功能划分:

  1. 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn...

  2. 根据用户访问不同的路径执行不同的函数 c. 从HTML读取出内容,并且完成字符串的替换 --> jinja2(模板语言)

Python中Web框架的分类:

  1. 按上面三个功能划分:

    1. 框架自带a,b,c --> Tornado

    2. 框架自带b和c,使用第三方的a --> Django

    3. 框架自带b,使用第三方的a和c --> Flask

  2. 按另一个维度来划分:

    1. Django --> 大而全(你做一个网站能用到的它都有)

    2. 其他 --> Flask 轻量级

二、Django安装及创建项目

安装Django

pip3 install django==版本号(1.11.11/2.2.6)
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ django==版本号(1.11.11/2.2.6)

命令行创建项目

django-admin startproject project名称

pycharm创建项目

File --> New project --> 左侧选Django --> 右侧填项目路径

设置Django项目:

  1. manage.py:项目管理入口文件

  2. settings.py:

1. 配置HTML文件存放的位置
	Templates(存放HTML文件的配置) <-- 告诉Django去哪儿找我的HTML文件
2. 配置静态文件存放的位置
	# 静态文件保存目录的别名
	STATIC_URL = '/static/' # 所有静态文件(css/js/图片)都放在我下面你配置的文件夹中
	STATICFILES_DIRS = [
		os.path.join(BASE_DIR, "static"),
	]
3. 配置中文及时区
	LANGUAGE_CODE = 'zh-hans'
	TIME_ZONE = 'Asia/Shanghai'
4. INSTALLED_APPS # 告诉Django有哪些APP
  1. urls.py: 保存了路径和函数的对应关系

Django项目的启动

  1. 命令行启动

在项目的根目录下(也就是有manage.py的那个目录),运行:
python3 manage.py runserver IP:端口--> 在指定的IP和端口启动
python3 manage.py runserver 端口   --> 在指定的端口启动
python3 manage.py runserver        --> 默认在本机的8000端口启动
  1. PyCharm启动

点绿色的小三角,直接可以启动Django项目(前提是小三角左边是你的Django项目名)

Django WEB请求流程(简版)

  1. 启动Django项目,等待用户连接

  2. 浏览器在地址栏输入URL,来连接我的Django项目

  3. 在urls.py中 找 路径和函数的 对应关系

  4. 执行对应的函数

  5. 返回响应

三、Django中的APP

什么是APP?以及为什么要用APP?

方便我们在一个大的Django项目中,管理实现不同的业务功能.

project  --> 项目  (大学校)
APP      --> 应用  (Linux学院/Python学院/大数据学院/Java学院)

创建APP的命令

命令行,在Django项目的根目录输入: python3 manage.py startapp app名字

四、urls.py路由

  1. 不带参数的请求

path('admin/', admin.site.urls)
  1. 带参数的请求

path('solution/<int:变量名>/', views.ListSolution.as_view(), name="solutionList"),

五、views.py视图

专门用来定义处理请求的函数

基本必备三件套 from django.shortcuts import HttpResponse, render, redirect

  1. HttpResponse("要返回的内容") --> 通常用于直接返回数据

  2. render(request, "html文件", {"k1": v1}) --> 返回一个HTML文件或者打开文件进行字符串替换

  3. redirect("URL") --> 告诉用户的浏览器去访问其他的URL

request相关

  1. GET请求和POST请求

GET请求:
	1. 浏览器请求一个页面
	2. 搜索引擎检索关键字的时候
	3. a标签
POST请求:
	1. 浏览器向服务端提交数据,比如登录/注册等
	2. 修改(新增)大段的数据
	3. 上传文件
  1. GET请求URL传值

127.0.0.1:8000/user/?变量名=变量值
  1. 获取request请求的方法

request.method == "GET"/"POST"
  1. 获取GET请求参数

request.GET.get(变量名, 默认值)
  1. 获取POST请求参数

request.POST.get(name的变量名, 默认值) # 获取单个值
request.POST.getlist(name的变量名) # 获取多选列表值

六、ORM模型(Model)

ORM的对应关系

类 ---> 数据表 对象 ---> 数据行 属性 ---> 字段

ORM能做的事儿

  1. 操作数据表 --> 创建表/删除表/修改表(操作models.py里面的类)

  2. 操作数据行 --> 数据的增删改查

使用Django的ORM连接MySQL的详细步骤:

  1. 自己动手创建数据库:create database 数据库名;

  2. 在Django项目中设置连接数据库的相关配置(settings.py 告诉Django连接哪一个数据库)

# 数据库相关的配置
DATABASES = {
	'default': { 'ENGINE': 'django.db.backends.mysql', # 连接的数据库类型 
	'HOST': '127.0.0.1', # 连接数据库的地址 
	'PORT': 3306, # 端口 
	'NAME': "day61", # 数据库名称 
	'USER': 'root', # 用户 
	'PASSWORD': '123456' # 密码 
	}
}
  1. 在app下面的models.py文件中定义一个类,这个类必须继承models.Model

class 类名(models.Model): 
	...
  1. 执行两个命令

python3 manage.py makemigrations # 新建Model或Model有改动时需要执行
python3 manage.py migrate # 把更改翻译成SQL语句,去数据库执行

在app/models.py里面定义类

一个简单的Model示例:

# 出版社
class Publisher(models.Model):
    id = models.AutoField(primary_key=True)  # 自增的ID主键
    # 创建一个varchar(64)的唯一的不为空的字段
    name = models.CharField(max_length=64, null=False, unique=True)

ORM单表的增加和查询

  1. 查询

models.UserInfo.objects.all() # 查询所有
  1. 增加

models.UserInfo.objects.create(字段名=字段值)
  1. 删除

solution = Solution.objects.get(id=id) # 先获取对象
solution.delete() # 再删除
# 或
Solution.objects.get(id=id).delete()
  1. 修改

solution = Solution.objects.get(id=id) # 先获取对象
solution.字段名 = 字段值 # 修改某个字段的值
solution.save() # 保存修改

一对多、多对多模型

  1. 关系:

1. 一本书   只能   有一个出版社
2. 一本书   能有   多个作者
3. 一个作者 能写   多本书

出版社和书: 一对多    --> 外键
书和作者:   多对多    --> 用第三张表做关联

Django基础知识学习及使用

  1. 一对多关系操作

# 出版社
class Publisher(models.Model):
	id = models.AutoField(primary_key=True)  # 自增的ID主键
	# 创建一个varchar(64)的唯一的不为空的字段
	name = models.CharField(max_length=64, null=False, unique=True)
	addr = models.CharField(max_length=128)
# 书
class Book(models.Model):
	id = models.AutoField(primary_key=True)  # 自增的ID主键
	# 创建一个varchar(64)的唯一的不为空的字段
	title = models.CharField(max_length=64, null=False, unique=True)
	# 和出版社关联的外键字段
	publisher = models.ForeignKey(to="Publisher")

# 增加
new_book_obj = models.Book.objects.create(
    title="新书的名字",
    # publisher=publusher_obj,
    publisher_id=7
)

# 修改
book_obj = models.Book.objects.get(id=9)
book_obj.title=request.POST.get("book_title")
book_obj.publisher_id=9
book_obj.save()
  1. 多对多关系操作

# 作者表
class Author(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=16, null=False, unique=True)
    # 告诉ORM 我这张表和book表是多对多的关联关系,ORM自动帮我生成了第三张表
    book = models.ManyToManyField(to="Book")

    def __str__(self):
        return "<Author Object: {}>".format(self.name)

# 增加
# 取到提交的数据
new_author_name = request.POST.get("author_name")
# post提交的数据是多个值的时候一定会要用getlist,如多选的checkbox和多选的select
books = request.POST.getlist("books")
# 创建作者
new_author_obj = models.Author.objects.create(name=new_author_name)
# 把新作者和书籍建立对应关系,自动提交
new_author_obj.book.set(books)

Template模板

取值

{{ 变量名 }}

循环

{% for user in user_list %}
...
{% endfor %}

循环计数

{{ forloop.counter }}

最后一次循环

{{ forloop.last }}

判断

{% if book_obj.publisher_id == publisher.id %}
{#  当前书籍关联的出版社才默认选中#}
<option selected value="{{ publisher.id }}">{{ publisher.name }}</option>
{% else %}
{# 其他的出版社不选中 #}
<option value="{{ publisher.id }}">{{ publisher.name }}</option>
{% endif %}
{# 如果当前这本书 在 当前作者关联的所有书 里面 #}
{% if book in author.book.all %}
<option selected value="{{ book.id }}">{{ book.title }}</option>
{% else %}
<option  value="{{ book.id }}">{{ book.title }}</option>
{% endif %}

到此,相信大家对“Django基础知识学习及使用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. mysql基础知识学习
  2. Django 学习之 分页器的使用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

django

上一篇:Android中怎么实现悬浮窗权限

下一篇:Android中怎么利用AsyncTask实现下载文件动态更新进度条功能

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》