第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')
相关推荐
9稳14 分钟前
基于单片机的家庭安全系统设计
开发语言·网络·数据库·单片机·嵌入式硬件
逍遥德15 分钟前
Postgresql 系统表作用解释
数据库·后端·sql·postgresql
sjg2001041417 分钟前
GoFrame学习随便记3(待续)
学习
MonkeyKing_sunyuhua39 分钟前
ES文档序号写错的问题的修复
java·数据库·elasticsearch
饱饱要坚持可持续发展观44 分钟前
Liquibase preConditions 执行前判断详解
数据库·liquibase
千里马学框架44 分钟前
跟着google官方文档学习车载音频Car audio configuration
学习·configuration·音视频·aaos·安卓framework开发·audio·车机
代码煮茶君1 小时前
MySQL 数据库死锁及核心机制全解析
android·数据库·mysql
代码游侠1 小时前
ARM嵌入式开发代码实践——LED灯闪烁(C语言版)
c语言·开发语言·arm开发·笔记·嵌入式硬件·学习
咕噜企业分发小米1 小时前
豆包大模型在药物研发中的知识检索效率如何?
java·开发语言·数据库
LaughingZhu1 小时前
Product Hunt 每日热榜 | 2026-01-20
数据库·人工智能·经验分享·神经网络·搜索引擎·chatgpt