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