Django学习随笔

Django学习随笔

Django的学习资料网上已能找到很多,本文仅记录学习过程中遇到的一些问题

虚拟环境搭建

这个直接搜索即可,有很多资料: django虚拟环境搭建.

应用和项目的区别

在Django目录下执行

python manage.py startapp/startroject 应用名/项目名

将创建应用或项目,项目和应用有什么区别?
应用是一个专门做某件事的网络应用程序——比如博客系统,或者公共记录的数据库,或者小型的投票程序。项目则是一个网站使用的配置和应用的集合。项目可以包含很多个应用。应用可以被很多个项目使用。
如果在主项目下创建了新的项目或应用,需要在主项目的setting.py的INSTALLED_APPS列表里添加项目或应用名。
主项目的urls.py的urlpatterns列表也要包含path(‘url’, include(‘子项目.urls’))

from django.contrib import admin
from django.urls import path,include

数据库操作

在modes.py中进行修改后,在Django目录下执行

python manage.py makemigrations #生成数据库迁移文件,数据库未更改
python manage.py migrate #执行数据库迁移,数据库将更改

modes.py中每个继承models.Model的类都将是数据库中的一个表,models位于django.db中。modes.py中定义的类不需要指定主键,django将自动为其指定主键。
若要使用MySQL数据库,需要在命令行执行pip install pymysql安装pymysql,并在setting.py中加入以下代码,将默认数据库设置为MySQL

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

若提示版本错误,可在__init__.py加入以下代码

import pymysql

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

在某个数据库查找时,可用表名.objects.get(列名=值)获得某个元素,表明.objects.filter(列名=值)获得某些元素
要配合except 表名.DoesNotExist:使用,若不存在相应元素,则进入异常处理。

时区和语言

在setting.py中写入以下代码,将时区设置为东八区,语言设置为简体中文

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False

static目录

假设项目路径下有statics目录,用于保存资源文件,可将static目录设定为statics,在模板中可直接用{% load static %}
在setting.py加入以下代码

import os
STATIC_URL = '/statics/'
STATIC_ROOT = os.path.join(BASE_DIR, '/statics/').replace('\\', '/')
STATICFILES_DIRS = [(os.path.join(BASE_DIR, 'statics'))]

Views

views.py的一些引用

以后继续补充

from django import views
from django.http import JsonResponse
from django.shortcuts import render, get_object_or_404, get_list_or_404, HttpResponse

views响应方式

若以单个函数响应URL请求,则函数形式为def func(request):可在函数体内判断request是get还是post请求。以这种方式响应的话,urls.py的urlpatterns列表中可直接写path('链接的URL', views.func, name='URL的名字')
若view处理逻辑复杂,则可以使用面向对象的方式实现。在views.py中引用from django import views,定义类 class Test(views.View),并为该类定义getpost函数def get(request):def post(request):,urls.py的urlpatterns列表中写path('链接的URL', views.Test.as_view(), name='URL的名字')
以上"URL的名字",可在模板中使用href="{% url 'URL的名字' 参数 %}"
若URL存在参数,则views中的get和post函数必须接受同名参数

django ajax

模板中需要引用https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js或者将js.cookie.js下载到本地
完整版的https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.js
百度的jquery源https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js
https://apps.bdimg.com/libs/jquery/2.1.4/jquery.js
官网源很慢 https://code.jquery.com/jquery-3.5.1.js
前端提供一些控件,定义其id属性
在模板中

<script>
$('#btncountry').click(function () { //btncountry是按钮的id,click注册其单击函数
	var csrf = Cookies.get('csrftoken') //获得CSRF Token
	console.log('前端发出了country')
	$.ajax({
		type: 'POST',
		url: {% url 'test' %},//要提交到的URL
		data: {
			country: $('#inputcountry').val(),
			csrfmiddlewaretoken: csrf //待提交的数据
		},
		success: function (result, status) {
			alert(result) 	//成功提交后 后端返回的数据在Result里
		},
		error: function (result, status) {
							//失败提交后 后端返回的数据在Result里
		}
	})
})
</script>

若前端需返回列表,字典等复杂数据结构,可使用json方式,前端使用JSON.stringify,后端使用json.loads
后端的代码,在post函数中,request是post的参数

from django.http import JsonResponse
from django.shortcuts import render, get_object_or_404, get_list_or_404, HttpResponse

if 'country' in request.POST:
	return JsonResponse(data='后台收到了country', safe=False)

#若后端返回的data为字符串等非json格式的数据,safe=False
#若safe=True,则data必须为dict格式(json)
若使用form提交表单,则form中所有具有name属性的元素值(value)都将被提交

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值