Django使用mysql数据库 + CSRF跨站点请求伪造

Django使用mysql数据库

1. pip install pymysql

2. 在 __init__.py 添加

import pymysql
pymysql.install_as_MySQLdb()

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

3. 在 settings.py中,更改DATABASES

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

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'ucs',
        'HOST': '10.141.7.113',
        'USER': 'root',
        'PASSWORD': 'root',
        'PORT': '3306'
    }
}

以上就可以用了

再来扩展几个知识吧!

# 1. 表结构迁移mysql
python manage.py makemigrations
python manage.py migrate

# 2. 导入导出表的数据, system是一个app.
python manage.py dumpdata system >sys.json     # 导出system app 所有模型的数据
python manage.py loaddata sys.json     # 覆盖性操作

 

CSRF跨站点请求伪造

百度: CSRF攻击与防御

参考网址:https://blog.csdn.net/xiaoxinshuaiga/article/details/80766369

CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,

你可以这样来理解:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。 如下:其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。

 

CSRF攻击攻击原理及过程如下:

       1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

       2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;

       3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

       4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;

       5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。 

 

 

 

下面是一个使用 Django 框架、MySQL 数据库和 OpenCV 库的 Web 应用程序的基本架构: 1. 环境配置 在操作系统上安装 MySQL 数据库和 OpenCV 库,并在 Python 中安装 Django 框架和 MySQL 驱动程序。 2. 创建 Django 项目 使用 Django 的命令行工具创建一个新项目: ``` django-admin startproject myproject ``` 其中,`myproject` 是项目的名称。 3. 创建 Django 应用程序 在项目中创建一个新应用程序: ``` cd myproject python manage.py startapp myapp ``` 其中,`myapp` 是应用程序的名称。 4. 配置数据库 在项目的 `settings.py` 文件中配置 MySQL 数据库: ``` DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': '127.0.0.1', 'PORT': '3306', } } ``` 其中,`mydatabase` 是数据库名称,`mydatabaseuser` 是数据库用户名,`mypassword` 是数据库密码,`127.0.0.1` 是数据库服务器地址,`3306` 是数据库服务器端口号。 5. 定义模型 在应用程序的 `models.py` 文件中定义数据模型: ``` from django.db import models class Image(models.Model): title = models.CharField(max_length=200) image = models.ImageField(upload_to='images/') created_at = models.DateTimeField(auto_now_add=True) ``` 其中,`Image` 是模型名称,`title` 是标题字段,`image` 是图片字段,`created_at` 是创建时间字段。 6. 创建数据库使用 Django 的命令行工具创建数据库表: ``` python manage.py makemigrations myapp python manage.py migrate ``` 7. 编写视图 在应用程序的 `views.py` 文件中编写视图函数: ``` from django.shortcuts import render from django.http import HttpResponse from .models import Image import cv2 def index(request): images = Image.objects.all() context = {'images': images} return render(request, 'index.html', context) def upload(request): if request.method == 'POST': title = request.POST['title'] image = request.FILES['image'] img = cv2.imdecode(np.fromstring(image.read(), np.uint8), cv2.IMREAD_COLOR) Image.objects.create(title=title, image=image) return HttpResponse('上传成功!') else: return HttpResponse('上传失败!') ``` 其中,`index` 函数用于显示所有图片,`upload` 函数用于上传新图片。 8. 编写模板 在应用程序的 `templates` 目录下创建 HTML 模板文件: ``` <!DOCTYPE html> <html> <head> <title>图片列表</title> </head> <body> <h1>图片列表</h1> <ul> {% for image in images %} <li> <img src="{{ image.image.url }}" height="200"> <br> {{ image.title }} <br> {{ image.created_at }} </li> {% endfor %} </ul> <h1>上传图片</h1> <form method="post" enctype="multipart/form-data"> {% csrf_token %} 标题:<input type="text" name="title"><br> 图片:<input type="file" name="image"><br> <input type="submit" value="上传"> </form> </body> </html> ``` 其中,`{% for image in images %}` 用于循环显示所有图片,`{{ image.image.url }}` 用于显示图片的 URL,`{% csrf_token %}` 用于防止站点请求伪造攻击。 9. 运行 Web 服务器 使用 Django 的命令行工具启动 Web 服务器: ``` python manage.py runserver ``` 10. 访问网站 在浏览器中访问 `http://127.0.0.1:8000/`,即可查看图片列表和上传新图片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值