第63天-django学习(十二)

补充模块importlib

介绍

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

动态加载模块

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

导入指定模块成员

# 导入模块 : 动态加载一个模块
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>

重新加载模块

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

获取已导入的模块列表

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头部。 - 使用验证码:  - 在敏感操作(如转账、更改密码等)上使用验证码  - 增加用户身份验证的防护。

正常服务端

        页面

<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>

        视图函数

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')

钓鱼服务端

        页面

<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>

        视图函数

def transform_normal(request):
    return render(request, 'transform_normal.html')

crsf校验

form表单校验
<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校验
<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表,并且必须是管理员用户才能进入

创建超级用户(管理员)

python3 manage.py createsuperuser

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

        页面

<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>

        视图函数

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')

相关推荐

  1. 63-django学习

    2023-12-08 17:48:03       35 阅读
  2. 62django学习一)

    2023-12-08 17:48:03       34 阅读
  3. 学习Android的

    2023-12-08 17:48:03       31 阅读
  4. 学习 Rust 的:如何使用向量

    2023-12-08 17:48:03       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 17:48:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 17:48:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 17:48:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 17:48:03       20 阅读

热门阅读

  1. Golang分布式事务

    2023-12-08 17:48:03       31 阅读
  2. K8S 工具收集

    2023-12-08 17:48:03       59 阅读
  3. Fiddler抓包测试

    2023-12-08 17:48:03       32 阅读
  4. Vue+ElementUI实现输入框日期框下拉框动态展示

    2023-12-08 17:48:03       37 阅读