第63天-django学习(十二)

补充模块importlib

介绍

importlib模块是Python中用于动态加载和导入模块的内置模块。它提供了一组函数和类,使得我们可以在运行时根据需要加载模块,并且可以对已导入的模块进行操作和管理。

动态加载模块

python 复制代码
# 导入模块 : 动态加载一个模块
import importlib
​
# 定义模块的名字
module_name = 'math'
# 动态导入模块
math_module = importlib.import_module(module_name)

导入指定模块成员

python 复制代码
# 导入模块 : 动态加载一个模块
import importlib
​
# 定义模块的名字
module_name = 'math'
# 动态导入模块
math_module = importlib.import_module(module_name)
# 从模块中获取相关的值
sqrt_func = getattr(math_module, 'sqrt')
print(sqrt_func) # <built-in function sqrt>

重新加载模块

python 复制代码
import importlib
​
# 要重新加载的模块名
module_name = 'my_module'
​
# 加载模块
my_module = importlib.import_module(module_name)
​
# 重新加载模块
my_module = importlib.reload(my_module)

获取已导入的模块列表

python 复制代码
import sys
​
for module_name, module in sys.modules.items():
    print(module_name, module)

CSRF跨域请求伪造

介绍

CSRF(Cross-Site Request Forgery)跨站请求伪造是一种常见的网络攻击方式。

攻击者通过诱导受害者访问恶意网站或点击恶意链接

  • 将恶意请求发送到目标网站上

  • 利用受害者在目标网站中已登录的身份来执行某些操作

  • 从而达到攻击的目的。

要保护自己免受CSRF攻击,网站开发者可以采取以下措施:

  • 使用CSRF令牌: - 在用户的请求中添加随机生成的令牌,并将该令牌保存在用户会话中。 - 每次提交请求时都会验证该令牌,以确保请求是合法的。 - 启用SameSite属性: - 将Cookie的SameSite属性设置为Strict或Lax,以限制跨站请求。 - 这可以在一定程度上缓解CSRF攻击。 - 严格验证请求来源: - 服务器端可以验证请求的来源是否为预期的网站域名 - 例如检查HTTP Referer头部。 - 使用验证码: - 在敏感操作(如转账、更改密码等)上使用验证码 - 增加用户身份验证的防护。

正常服务端

页面

html 复制代码
<h1>这是正规的网站</h1>
​
<form action="" method="post">
    <p>当前账户 :>>>> <input type="text" name="start_user"></p>
    <p>目标账户 :>>>> <input type="text" name="end_user"></p>
    <p>转账金额 :>>>> <input type="text" name="money"></p>
    <input type="submit">
</form>

视图函数

python 复制代码
def transform_normal(request):
    if request.method == "POST":
        user_start = request.POST.get("start_user")
        user_end = request.POST.get("end_user")
        money = request.POST.get("money")
        return HttpResponse(f"当前账户 :>>> {user_start} 向目标用户 :>>> {user_end} 转账了 :>>> {money}")
    return render(request, 'transform_normal.html')

钓鱼服务端

页面

html 复制代码
<h1>这是钓鱼的网站</h1>
​
<form action="http://127.0.0.1:8000/transform_normal/" method="post">
    <p>当前账户 :>>>> <input type="text" name="start_user" ></p>
    <p>目标账户 :>>>> <input type="text"></p>
    <p><input type="text" name="end_user" value="Hopes" style="display: none"></p>
    <p>转账金额 :>>>> <input type="text" name="money"></p>
    <input type="submit">
</form>

视图函数

python 复制代码
def transform_normal(request):
    return render(request, 'transform_normal.html')

crsf校验

form表单校验
html 复制代码
<form action="" method="post">
{% csrf_token %}
    <p>username:<input type="text" name="username"></p>
    <p>transfer_user<input type="password" name="password"></p>
    <p>money<input type="text" name="money"></p>
    <input type="submit">
</form>
ajax校验
html 复制代码
<button id="b1">ajax请求提交</button>
​
<script>
    $("#b1").click(function () {
        $.ajax({
            url: '',
            type: 'post',
            // (2) 利用模板语法提供的快捷书写
            data: {"username": "dream", 
                   "csrfmiddlewaretoken": "{{ csrf_token }}"},
            success: function () {
            }
        })
    })
</script>

Auth模块

引入

复制代码
    我们在创建一个Django项目之后,直接执行数据库迁移命令会自动生成很多表,其中有:
    django_session、uth_user两张表。
    jango在启动之后就可以直接访问admin路由,需要输入用户名和密码,数据参考的就是auth_user表,并且必须是管理员用户才能进入

创建超级用户(管理员)

html 复制代码
python3 manage.py createsuperuser

依赖于auth_user表完成登录注册功能

页面

html 复制代码
<form action="" method="post">
    {% csrf_token %}
    <p>username:<input type="text" name="username"></p>
    <p>password:<input type="text" name="password"></p>
    <input type="submit" class="btn btn-success">
</form>

视图函数

python 复制代码
def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user_obj = auth.authenticate(request, username=username, password=password)
        print(user_obj) 
        print(user_obj.username) 
        print(user_obj.password)  
        print(user_obj) 
​
    return render(request, 'login.html')
相关推荐
leegong2311141 分钟前
PostgreSQL 初中级认证可以一起学吗?
数据库
秋野酱2 小时前
如何在 Spring Boot 中实现自定义属性
java·数据库·spring boot
weisian1513 小时前
Mysql--实战篇--@Transactional失效场景及避免策略(@Transactional实现原理,失效场景,内部调用问题等)
数据库·mysql
AI航海家(Ethan)3 小时前
PostgreSQL数据库的运行机制和架构体系
数据库·postgresql·架构
架构文摘JGWZ3 小时前
FastJson很快,有什么用?
后端·学习
量子-Alex5 小时前
【多视图学习】显式视图-标签问题:多视图聚类的多方面互补性研究
学习
Kendra9195 小时前
数据库(MySQL)
数据库·mysql
乔木剑衣6 小时前
Java集合学习:HashMap的原理
java·学习·哈希算法·集合
练小杰6 小时前
Linux系统 C/C++编程基础——基于Qt的图形用户界面编程
linux·c语言·c++·经验分享·qt·学习·编辑器
时光书签6 小时前
Mongodb副本集群为什么选择3个节点不选择4个节点
数据库·mongodb·nosql