django框架——django基础使用

系列文章目录

第一章 django安装与介绍


文章目录

  • 系列文章目录
  • 一、django配置文件
    • 1.静态资源文件端口配置
    • 2.数据库配置
  • 二、django三个关键方法
    • 1.HttpResponse
    • 2. render
    • 3.redirect
  • 二、request对象方法
  • 三、djang orm简介
    • 1.特点
    • 2.概念
    • 3.orm基本使用
      • 1.编写类代码
      • 2.执行数据库迁移命令
      • 3.表名的特征
      • 4.扩展
      • 5.数据操作


一、django配置文件

一个完整的项目有数据持久层、业务逻辑层、表现层
其中表现层的html页面时存放在templates文件下的,而一些别的静态资源则需要在项目根目录下创建一个static文件(名字自定),在静态资源文件夹中放css、js、图片等。
业务逻辑层中对应的是views.py中的视图函数,通过编写函数来完成业务逻辑。
数据持久层则是首先在models.py中设置数据库,然后迁移表从而获取对应数据库,以便操作。

通过上诉三层需要设置django配置文件,其中静态资源文件需要开设静态端口

1.静态资源文件端口配置

静态文件资源访问接口固定配置

STATIC_URL = "/static/" #是接口前缀 表示具备访问静态文件资源的权限
STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static')
    ] #此处为列表,但是查找资源时一但找到资源就会自动停止在列表中的搜索

如: html页面路径
< link rel=“stylesheet” href=“/static/bootstrap-3.4.1-dist/css/bootstrap.css”>

当资源接口名需要反复变更时:可以对资源接口实行动态绑定
接口前缀动态绑定
此时配置文件中的STATIC_URL 可以随意修改只需要在引入资源文件处做一个修改即可

{% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.css' %}">

2.数据库配置

django配置文件中默认配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

连接到对应数据库修改为:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "dj", #数据库名字
        'HOST': "127.0.0.1", #连接数据库ip
        'PORT': 3306, #连接数据库端口
        "USER": "root", #连接的用户名
        "PASSWORD": "root", #连接的密码 
        #除此以外还可以添加别的设置如charset等但一定要大写
    }
}

针对于django3以前的版本需要额外设置模块
在项目同名的文件夹内的__init__.py
或者app容器的文件夹内的__init__.py
添加一行固定的代码

import pymysql
	pymysql.install_as_MySQLdb()

二、django三个关键方法

1.HttpResponse

主要用于返回字符串类型的数据
由于该方法返回的值能直接显示在页面上,所以不创建html
1.先在urls中添加路由

urlpatterns = [
    url(r'^admin/', admin.site.urls),
	url(r'^isHttpResponse/', views.isHttpResponse),
]

2.在views中添加视图函数

def isHttpResponse(request):
    return HttpResponse("这是一个字符串")

3.开启django服务后直接访问url

django框架——django基础使用_第1张图片

2. render

主要用于返回html文件 并且支持模板语法

1.先在urls中添加路由

urlpatterns = [
    url(r'^admin/', admin.site.urls),
	url(r'^register/', views.register),
]

2.在views中添加视图函数

def isHttpResponse(request):
    url(r'^register/', views.register),

3.在templates模板文件下创建register.html

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册title>
    <link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.css">
head>
<body>
<div class="container center-block">
    <h1>注册h1>
    <form action="" method="post">
        <div class="form-group">
            <label for="id_username">用户名:label>
            <input type="text" class="form-control" id="id_username" placeholder="用户名">
        div>
        <div class="form-group">
            <label for="id_password">密码:label>
            <input type="password" class="form-control" id="id_password" placeholder="密码">
        div>
        <div class="checkbox">
            <p>爱好:p>
            <label class="checkbox-inline">
                <input type="checkbox" id="is_play" value="play"> 打游戏
            label>
            <label class="checkbox-inline">
                <input type="checkbox" id="is_talk" value="talk"> 说话
            label>
            <label class="checkbox-inline">
                <input type="checkbox" id="is_sleep" value="sleep"> 睡觉
            label>
        div>
        <button type="submit" id="regbtn" class="btn btn-default">注册button>
    form>
div>
body>
html>

4.开启django服务后直接访问url
django框架——django基础使用_第2张图片

3.redirect

主要用于重定向 括号内可以写其他网站的全称 也可以自己网站的后缀

1.先在urls中添加路由

urlpatterns = [
    url(r'^admin/', admin.site.urls),
	url(r'^isRedirect/', views.isRedirect),
]

2.在views中添加视图函数

def isRedirect(request):
    return redirect("/register/")

3.开启django服务后直接访问url
django框架——django基础使用_第3张图片


二、request对象方法

提交post请求 默认会报403,因为django全局发送post请求均需要字符串验证
csrf功能:防止跨站请求伪造的功能

直接去配置文件中注释一行可以去除csrf
MIDDLEWARE = [
# ‘django.middleware.csrf.CsrfViewMiddleware’,
]

get请求和post请求都会触发同一个视图函数的运行,触发为action中设置的视图函数,如果没设置就以该网页自身视图函数运行。
针对不同的请求执行不同的代码
GET返回url中?后的数据
POST获取用户数据提交的普通数据
所以此时需要对全局的request进行操作

#获取request的请求类型
request.method  	#返回的是纯大写的请求方法字符串
#获取post方式的form表单数据
request.POST      #结果是一个QueryDict 可以看成字典处理
request.POST.get('username') 	#获取的到的是一个对象
request.POST.getlist('username') 	#获取的整个数据列表
# 获取url后面携带的数据
request.GET 	#结果是一个QueryDict 可以看成字典处理
request.GET.get('username') 	#获取的到的是一个对象
  request.GET.getlist('username') 	#获取的整个数据列表

三、djang orm简介

ORM:对象关系映射

1.特点

能够让不会写SQL的python程序员使用python语法就可以直接操作MySQL
好处:提升了开发效率,框架使用门槛降低等等
坏处:封装了SQL语句 有时候可能效率不高 还需要人为编写SQL调优

2.概念

表 => 类
一行行数据 => 类产生的一个个对象
数据字段 => 对象的一个个属性

3.orm基本使用

使用orm前提需要取models.py中编辑类代码

1.编写类代码

	class Users(models.Model):
    uid = models.AutoField(primary_key=True)  # 等价于uid int primary key auto_increment
    name = models.CharField(max_length=32)  # 等价于name varchar(32)
    pwd = models.IntegerField()  # 等价于pwd int

2.执行数据库迁移命令

python manage.py makemigrations # 记录操作
python manage.py migrate # 将操作迁移到数据库

首次执行迁移命令 django还会自动创建一些默认需要使用到的表

3.表名的特征

models.py中User => mysql中app01_user
由于django支持多个应用 为了区分不同应用下可能会出现相同的表名
所以自动加上了应用的前缀 因为同一个应用下不可能出现相同的表名

4.扩展

1.表的主键可以不写 orm会自动帮你写一个名为id的主键
2.每次修改了跟数据库相关的python代码 都需要重新执行迁移命令
针对两个迁移命令 可以采用pycharm提示功能编写

5.数据操作

# 增加数据
user_obj = models.User.objects.create(username='kdq', password='kdq123')
# 修改 不使用filter则为全部记录都修改
models.Users.objects.filter(uid=1).update(name='kdqdd')
# 查看 不使用filter则为全部记录都查看
res = models.Users.objects.filter(name='kdq')
#如果获取的记录不是一条需要使用索引或者first()获取第一条
res = models.Users.objects.filter().first() # 一堆记录中的第一条
res = models.Users.objects.all() # 表中的全部记录
re = res[0] # 拿第一条记录
# 删除 不使用filter则为全部记录都删除
models.Users.objects.filter(uid=3).delete()

你可能感兴趣的