Django


mysqlclient 1.3.13 or newer is required; you have 0.9.3.

在init文件中加入下列代码即可解决

import pymysql

pymysql.version_info = (1, 3, 13, "final", 0)
pymysql.install_as_MySQLdb()

@login_required

@login_required装饰器沒有使用session作为判断依据。因此如果需要使用session作为判断依据,需要自己写函数进行判断。

from django.shortcuts import redirect

def check_login(func):
    def inner(request, *args, **kwargs):
        next_url = request.get_full_path()
        # 获取session判断用户是否已登录
        if request.session.get('is_login'):
            # 已经登录的用户...
            return func(request, *args, **kwargs)
        else:
            # 没有登录的用户,跳转刚到登录页面
            return redirect(f"/login?next={next_url}")

    return inner

1051

执行python manage.py migrate出現錯誤 django.db.utils.OperationalError: (1051, “Unknown table ‘flexium.polls_vote’”) 時,先执行 python manage.py migrate --fake,然后再执行python manage.py migrate即可。

django 關於換行

在文本后加上*| linebreaks*即可实现换行

生成依赖文件

pip freeze > requirements.txt
安装依赖
pip install -r requirement.txt

Linux后台运行

nohup python manage.py runserver

$.ajax() is not a function

使用bootstrap框架时,因为已经引入了的js文件中不包含Ajax,会报这样的错误;如果直接应用,仍然存在这样的问题,需要将bootstrap引用的js文件注释掉,重新引入完整的js文件。

生成依赖

依赖文件生成
pip freeze > requirements.txt
依赖文件安装
pip install -r requirement.txt

django-markdown

处理markdown内容时,若要传到前台,后台需要使用markdown(sth)处理,前端使用{{ sth | safe | linebreaks }}前端页面才能正确显示输入是的markdown文本。

select-multiple

使用select的multiple属性时,后台一般只能获取到最后一个选择的值。

    <select name="testMul" id="" multiple>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
    </select>
>>> 4

这时,需要修改select的name,加入*[]*,告诉后台传入的是一个列表。

    <select name="testMul[]" id="" multiple>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
    </select>
>>> ['2', '4']

templates

将各个app对应的html文件放入对应的app目录下
修改settings
TEMPLATES = [
{
‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)],
‘APP_DIRS’: True,
}
]
新建文件夹appname>templates>appname

bootstrap_table不刷新

table的url需要設置,同時需要設置
queryParams: function (params) {//上传服务器的参数
return { //如果是在服务器端实现分页,limit、offset这两个参数是必须的
limit: params.limit, // 每页显示数量
offset: params.offset, // SQL语句起始索引
//page : (params.offset / params.limit) + 1, //当前页码
selection: $(’#selection’).val(),
spcTypeSelect: $(’#spcTypeSelect’).val(),
insp_item: $(’#insp_item’).val(),

};
},
加粗的部分為需要傳輸的數據

django文件上傳

非Ajax方式

<form action="{% url 'your_url' %}" enctype="multipart/form-data" method="post">
     {% csrf_token %}
     <label for="spcType">
         <input type="file" name="myFile" class="inputStyle">
     </label>
     <button type="submit">上傳</button>
</form>

利用form上傳文件時,enctype必須設爲multipart/form-data,且必須是post方法,接收數據時,需要使用request.FILES[‘name’]或者request.FILES.get(),而不可使用request.POST.get()。
Ajax方式

<form action="{% url 'your_url' %}" enctype="multipart/form-data" method="post">
     {% csrf_token %}
     <label for="spcType">
         <input type="file" id="myFile">
     </label>
     <button id="update">上傳</button>
</form>
<script>
$("#update").click({
	const formData = new FormData();
	const csrf_data = $('[name=csrfmiddlewaretoken]').val();
	const myFile= $('#myFile')[0].files[0];
	formData.append('csrfmiddlewaretoken',csrf_data);
	formData.append('myFile',myFile);
	$.ajax({
        url:'{%url "upload" %}',
        type:'post',
        data:formdata,
        processData: false ,    // 不处理数据
        contentType: false,    // 不设置内容类型
        success:function (res) {
            console.log(res);
        }
	})
})
</script>

同樣的,使用Ajax方式上傳文件也需要使用post方式,接收方式同樣要使用request.FILES[‘name’]或者request.FILES.get()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值