Python Django-02 静态文件配置 form表单提交数据 数据库连接及增删改查 orm 登录注册修改事例...

一  静态文件配置

1.目的:主要是为了保证templates文件夹下的html文件可以正确的导入css,js,jq等样式。

2.具体步骤:

   #1.首先创建static文件夹,与app应用同级目录,将css jq js等文件放进去(通常情况下文件夹中存放这几个文件夹)。    

css文件夹  当前网站所有的样式文件
js文件  当前网站所有的js文件
img文件  当前网站所有的图片文件
其他(前端框架代码 第三方插件代码...)

   #2.静态文件配置(settings.py中配置) 

STATIC_URL = '/static/'  # 这个static不是文件夹的名字 而是接口前缀
"""只要你想访问静态文件中的资源 文件路径就必须用static开头"""
# 手动将static文件夹中所有的资源暴露给用户
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static'),  # 真正的文件夹路径
    os.path.join(BASE_DIR,'static1'),  # 真正的文件夹路径
]

   #3.temlates文件夹下html文件引入

#1.动态解析
静态文件接口前缀"动态解析"
{% load static %}

<script src="{% static 'jq/jquery-3.4.1.js' %}"></script>
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.3.7/js/bootstrap.min.js' %}"></script>

# 静态
<script src="/static/jq/jquery-3.4.1.js"></script>
<link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">
<script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script>    

 二 form表单提交数据

1.form表单默认是get请求,携带数据的方式是url问好后跟数据。例如:http://127.0.0.1:8000/login/?username=zekai&password=123

2.可以通过form表单的method属性修改为post请求,改成post请求之后 需要去settings.py文件中注释掉一个中间件。

#1.form表单修改post请求
<form action="" method="post">

#2.settings.py注释中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
            'django.contrib.sessions.middleware.SessionMiddleware',
            'django.middleware.common.CommonMiddleware',
            # 'django.middleware.csrf.CsrfViewMiddleware',
            'django.contrib.auth.middleware.AuthenticationMiddleware',
            'django.contrib.messages.middleware.MessageMiddleware',
            'django.middleware.clickjacking.XFrameOptionsMiddleware',
        ]

 

 

 3.form表单action值的三种情况

form表单提交数据目的地由action
 1.不写的情况下 默认往当前地址提交
 2.还可以写后缀/index/(将项目常用这种)
 3.还可以写全路径

三 pycharm连接数据库

大前提

1.settings文件中配置
                DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'NAME': 'day51',
                'HOST':'127.0.0.1',
                'PORT':3306,
                'USER':'root',
                'PASSWORD':'123',
                'CHARSET':'utf8'
            }

  1.按如下图步骤查找数据库(第4步也可选择其他数据库,以mysql为例,

 2.选择mysql数据库之后

#1.先下载mysql数据库驱动(注意驱动版本选择与数据库版本相匹配)

  #2.连接数据库

 

 

 #3.连接成功后

 

 

 3.

还要在项目名下的init文件或者是应用名下的init文件中告诉django不要使用默认的mysqldb连接mysql
而是使用pymysql
# 在项目和app应用其中一个__init__.py文件声明即可
2.还要在项目名下的init文件或者是应用名下的init文件中告诉django不要使用默认的mysqldb连接mysql
而是使用pymysql
 import pymysql pymysql.install_as_MySQLdb()

 

 

四 orm及模型表

ORM对象关系映射
    类 》》 表    
    对象 》》 一条条记录
    对象的属性 》》 字段对应的值

1.首先需要在app 应用models.py中书写模型类(数据对用的表)

from django.db import models

# Create your models here.

# 例:创建User类
class User(models.Model): # 将id字段设置为User表主键字段 在django orm中 你可以不写主键字典 django会默认给你的表创建一个名为id的主键字段 # id = models.AutoField(primary_key=True) # 一旦你自己指定了主键字段 那么django就不会自动再帮你创建了 username = models.CharField(max_length=32) # username varchar(32) CharField必须要指定max_length参数 # password = models.IntegerField() # password int password = models.CharField(max_length=64) # addr = models.CharField(max_length=32,default='China') # default该字段默认值 # age = models.IntegerField(null=True) # 该字段允许为空 def __str__(self): return '我是user表中的对象:%s'%self.username

 2.执行数据库迁移(同步)命令

python3 manage.py makemigrations  # 仅仅是在小本本上(migrations文件夹)记录数据库的修改 并不会直接操作数据

python3 manage.py migrate  # 将数据库修改记录 真正同步到数据库

注意:1.只要动了models中跟数据库相关的代码 就必须重新执行上面的两条命令 缺一不可(******)
2.执行完上述2条命令后,创建出来数据库的表会在表名前加上app应用名

3.表字段的增删改查

大前提:只要增删改,操作完之后就执行数据库迁移命令

1.增:
 直接在modles.py文件的类中,书写增加的字段代码即可
注意:如果事先表创建好了,还需要添加默认值或设置为空如下事例。        
  例:1.给新增的字段设置默认值(事先创建好)
   addr = models.CharField(max_length=32,default='China')  # default该字段默认值
  例:2.给新增的字段设置成可以为空(事先创建好)
   age = models.IntegerField(null=True)  # 该字段允许为空
 
2.删(慎用)
删除字段 直接在models.py中注释该字段 然后重新执行两条命令即可
注意:执行完之后 表中该字段所对应的所有的数据全部删除
并且一般情况下 基本是不会用到真正意义上的删除

3.改
更改字段 直接在models.py中对该字段代码重新书写 然后重新执行两条命令即可

4.查
数据库中sql语句或models.py查看

4.获取前端的数据

  #1..操作数据行之前需要知道的

#1.获取请求方式
request.method  # 能够获取前端请求方式 并且是全大写的字符串

# 2.获取请求数据(post和get同理)
request.POST  # <QueryDict: {'name': ['zs'], 'password': ['123']}> 获取前端post请求提交过来的数据  就把它当成一个大字典即可,k为form表单里的name值,v为列表 列表里为用户输入的值

# 3.
request # 理解为一个对象包含了浏览器的许多信息

#2.前端的数据获取(post和get同理,以post为例)

# 方式1(推荐使用)
request.GET.get('username')  # 虽然value是一个列表 但是默认只取列表中最后一个元素

# 方式2(强烈不建议你使用中括号的形式取值,k不存在直接报错)
password = request.POST['password']  # 不推荐 使用
# 方式3(获取整个列表) 
request.GET.getlist('hobby')

5.数据行

前提

首先在app应用的文件夹下的 views.py 导入models.py文件
以 app01为例:
from app01 import models

#1.数据行增

#方式1
models.类名.objects.create(属性名1=值,属性名2=值)
例:
models.User.objects.create(username=username,password=password)
create方法能够新增数据 并且有一个返回值
# 返回值就是新增的数据对象本身
#方式2
对象名=models.类名(属性名1=值,属性名2=值)
对象名.save()
例:
user_obj = models.User(username=username,password=password)
user_obj.save()

#2.数据行的查

方式1 filter(推荐使用)
 1.filter查询出来的结果是一个querySet对象可理解为一个"列表 列表内放的才是一个个的数据对象本身,这个列表支持正数索引取值和切片但不推荐"
 2.当查询条件不存在的时候 不会报错 只会返回一个空列表,filter括号内 支持写多个参数用逗号隔开  并且参数与参数之间是and的关系
 3.filter拿到的结果就是一个querySet对象(你现在只需要知道filter拿到的结果就能够点query查看sql语句)

models.类名.objects.filter(条件)
models.类名.objects.all()

语法事例1
user_list = models.User.objects.filter(username=username) #拿到querySet对象(列表)

语法事例2
user_obj = models.User.objects.filter(username=username).first()  # 拿列表中第一个数据对象

语法事例3
user_list = models.User.objects.all() # 查询所有

print(res.query)  # 只有querySet对象才可以直接点query查看年内部对应的sql语句

方式2 get(不推荐):返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
models.类名.objects.get(条件) # 获取对象自身,不再是列表套对象
models.User.objects.get(username=username)

#3.查询基础上数据行的删

models.类名.objects.filter(条件).delete()  # delete from user where id = delete_id;
事例:
models.User.objects.filter(id=delete_id).delete()  # delete from user where id = delete_id;

#4.查询基础上更改

方式1(推荐):

models.类名.objects.filter(条件).update(属性名1=值,属性名2=值)

models.User.objects.filter(id=edit_id).update(username=username,password=password)

# update user set username = username,password = password where id = edit_id
        """
        filter拿到是一个列表   filter操作其实都是批量操作
        如果filter结果列表中有多个数据 那么会一次性全部修改 
        类似于for循环一个个修改
        
        """
方式2(不推荐):
对象.属性=值
对象.save()

edit_obj.username = username
edit_obj.password = password
edit_obj.save()
        """
        第二种方式会从头到尾将所有的字段全部修改一遍  效率极低
        """

转载于:https://www.cnblogs.com/tfzz/p/11528628.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值