本篇内容主要讲解“Django基础知识学习及使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Django基础知识学习及使用”吧!
socket服务端 与 浏览器的通信
负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn...
根据用户访问不同的路径执行不同的函数 c. 从HTML读取出内容,并且完成字符串的替换 --> jinja2(模板语言)
按上面三个功能划分:
框架自带a,b,c --> Tornado
框架自带b和c,使用第三方的a --> Django
框架自带b,使用第三方的a和c --> Flask
按另一个维度来划分:
Django --> 大而全(你做一个网站能用到的它都有)
其他 --> Flask 轻量级
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名称
File --> New project --> 左侧选Django --> 右侧填项目路径
manage.py:项目管理入口文件
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
urls.py: 保存了路径和函数的对应关系
命令行启动
在项目的根目录下(也就是有manage.py的那个目录),运行: python3 manage.py runserver IP:端口--> 在指定的IP和端口启动 python3 manage.py runserver 端口 --> 在指定的端口启动 python3 manage.py runserver --> 默认在本机的8000端口启动
PyCharm启动
点绿色的小三角,直接可以启动Django项目(前提是小三角左边是你的Django项目名)
启动Django项目,等待用户连接
浏览器在地址栏输入URL,来连接我的Django项目
在urls.py中 找 路径和函数的 对应关系
执行对应的函数
返回响应
方便我们在一个大的Django项目中,管理实现不同的业务功能.
project --> 项目 (大学校) APP --> 应用 (Linux学院/Python学院/大数据学院/Java学院)
命令行,在Django项目的根目录输入: python3 manage.py startapp app名字
不带参数的请求
path('admin/', admin.site.urls)
带参数的请求
path('solution/<int:变量名>/', views.ListSolution.as_view(), name="solutionList"),
专门用来定义处理请求的函数
from django.shortcuts import HttpResponse, render, redirect
HttpResponse("要返回的内容") --> 通常用于直接返回数据
render(request, "html文件", {"k1": v1}) --> 返回一个HTML文件或者打开文件进行字符串替换
redirect("URL") --> 告诉用户的浏览器去访问其他的URL
GET请求和POST请求
GET请求: 1. 浏览器请求一个页面 2. 搜索引擎检索关键字的时候 3. a标签 POST请求: 1. 浏览器向服务端提交数据,比如登录/注册等 2. 修改(新增)大段的数据 3. 上传文件
GET请求URL传值
127.0.0.1:8000/user/?变量名=变量值
获取request请求的方法
request.method == "GET"/"POST"
获取GET请求参数
request.GET.get(变量名, 默认值)
获取POST请求参数
request.POST.get(name的变量名, 默认值) # 获取单个值 request.POST.getlist(name的变量名) # 获取多选列表值
类 ---> 数据表 对象 ---> 数据行 属性 ---> 字段
操作数据表 --> 创建表/删除表/修改表(操作models.py里面的类)
操作数据行 --> 数据的增删改查
自己动手创建数据库:create database 数据库名;
在Django项目中设置连接数据库的相关配置(settings.py 告诉Django连接哪一个数据库)
# 数据库相关的配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 连接的数据库类型 'HOST': '127.0.0.1', # 连接数据库的地址 'PORT': 3306, # 端口 'NAME': "day61", # 数据库名称 'USER': 'root', # 用户 'PASSWORD': '123456' # 密码 } }
在app下面的models.py文件中定义一个类,这个类必须继承models.Model
class 类名(models.Model): ...
执行两个命令
python3 manage.py makemigrations # 新建Model或Model有改动时需要执行 python3 manage.py migrate # 把更改翻译成SQL语句,去数据库执行
# 出版社 class Publisher(models.Model): id = models.AutoField(primary_key=True) # 自增的ID主键 # 创建一个varchar(64)的唯一的不为空的字段 name = models.CharField(max_length=64, null=False, unique=True)
查询
models.UserInfo.objects.all() # 查询所有
增加
models.UserInfo.objects.create(字段名=字段值)
删除
solution = Solution.objects.get(id=id) # 先获取对象 solution.delete() # 再删除 # 或 Solution.objects.get(id=id).delete()
修改
solution = Solution.objects.get(id=id) # 先获取对象 solution.字段名 = 字段值 # 修改某个字段的值 solution.save() # 保存修改
关系:
1. 一本书 只能 有一个出版社 2. 一本书 能有 多个作者 3. 一个作者 能写 多本书 出版社和书: 一对多 --> 外键 书和作者: 多对多 --> 用第三张表做关联
一对多关系操作
# 出版社 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()
多对多关系操作
# 作者表 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)
{{ 变量名 }}
{% 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基础知识学习及使用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。