编辑器VScode
https://blog.csdn.net/weixin_41064293/article/details/80739268
https://blog.csdn.net/win7583362/article/details/79315055
创建虚拟环境
pip install virtualenv
pip install virtualenvwrapper # 这是对virtualenv的封装版本,一定要在virtualenv后安装
选择一个用来存放虚拟环境的文件,如E:/python3
cd E:python3 # 进入该文件
virtualenv envname # 创建一个名字为envname的虚拟环境
dir # 查看当前目录可以知道一个envname的文件已经被创建
删除
rmvirtualenv envname
*启动虚拟环境
# 进入虚拟环境文件
cd envname
# 进入相关的启动文件夹
cd Scripts
activate # 启动虚拟环境
deactivate # 退出虚拟环境
为环境指定Python解释器:
virtualenv -p c:\python27\python.exe envname
Setting相关
ALLOWED_HOSTS = ['*']
'DIRS': [os.path.join(BASE_DIR, 'templates')] #设置templates路径
DEBUG = False #项目上线之后
ALLOWED_HOSTS = ['允许访问的url']
DATABASES = {
'default':
{
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
LANGUAGE_CODE = 'zh-hans' #使用中国语言
TIME_ZONE = 'Asia/Shanghai' #使用中国上海时间
#静态文件的访问路径
STATIC_URL = '/static/'
#静态文件的存储路径
STATICFILES_DIRS =
[
os.path.join(BASE_DIR, 'static')
]
创建APP
./manage.py startapp 应用名称
python manage.py startapp test1
数据库
一、MySql
1、 创建数据库,生成迁移文件,创建超级用户
create database 数据库名 default charset utf8 collate utf8_general_ci;
1)生成迁移文件
python manage.py makemigrations
2)执行迁移生成表
python mange.py migrate
3)创建超级用户
python manage.py createsuperuser
二、models.py,admin.py的编写
1、models.py
class Author(models.Model):
names = models.CharField(max_length=30)
age = models.IntegerField()
email = models.EmailField(null=True)
#增加一个状态列,来表示用户是启用的还是禁用的,默认为True表示启用
isActive = models.BooleanField(default=True)
def __str__(self):
return self.names
# 声明内部类,来定义当前类在管理页面中的展现形式
class Meta:
# 1.修改当前表名为 author
db_table='author'
# 2.修改实体类在后台管理页中的名称(单数)
verbose_name='作者'
# 3.修改实体类在后台管理页中的名称(复数)
verbose_name_plural = verbose_name
# 4.首先按照年龄降序排序,其次按照ID升序排序
ordering = ['-age','id']
class BookInfo(models.Model):
title = models.CharField(max_length=20)
date = models.DateField()
#外键在多类里面, hbook =
hbook = models.ForeignKey('Author')
from xx.models import BookInfo,HeroInfo
b = BookInfo()
b.title = '天龙八部'
#存入数据
b.save()
h = HeroInfo()
h.name = '段誉'
#建立'天龙八部' 和 '段誉' 的一对多的关系
h.hbook = b
2、admin后台管理
http://127.0.0.1:8000/admin/
链接表
admin.py
from django.contrib import admin
from booktest.models import BookInfo,HeroInfo
#注册在后台
admin.site.register(BookInfo)
admin.site.register(HeroInfo)
三、注意事项
1、null
如果True,Django将在数据库中将空值存储为NULL。 默认是False.
blank
如果True,则允许该字段为空。 默认是False.
请注意,这与null不同。 null纯粹与数据库相关,而空白与验证相关。 如果一个字段有blank = True,表单验证将允许输入一个空值。
如果一个字段有blank = False,则该字段将是必需的。
2、primary_key=True
id = models.AutoField(primary_key=True)
primary_key
如果True,则该字段是模型的主键。
如果你没有为模型中的任何字段指定primary_key = True,Django会自动添加一个IntegerField来保存主键,所以你不需要设置primary_key = True,
除非您想覆盖默认的主键行为。
这是一个自动递增的主键。如果您想要指定自定义主键,只需在其中一个字段上指定primary_key = True即可。 如果Django看到你明确
设置了Field.primary_key,它不会添加自动id列。每个模型只需要一个字段具有primary_key = True(显式声明或自动添加)
Views--视图
一、
def index(request):
return HttpResponse("index")
二、get_object_or_404()
views.py 中,用get_object_or_404()函数代替try···except更好,在找不到相关数据时 Django 会自动引起 Http404 错误
# 用 get_object_or_404() 查询数据
def detail(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/detail.html', {'question': question})
三、重定向HttpResponseRedirect,
reverse用了解析url,有参数
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
def myview(request):
...
return HttpResponseRedirect(reverse('index', kwargs={'blog_id': blog_id, 'user_id': user_id}))
四、页面错误
关闭调试模式之后 DEBUG = False
404.html
# 404 错误
1、URL,没有配置,或者配置错误
在Templates下创建一个404.html,自定义404页面
500.html
# 500 错误
1、视图views,代码错误
在Templates下创建一个404.html,自定义404页面
Url.py
1、主目录下的url
from django.contrib import admin
from django.urls import include, path,re_path
# include 是转向pools.urls来处理
urlpatterns = [
path('polls/', include('polls.urls',namespace='')),
path('admin/', admin.site.urls),
#re_path()
]
2、polls,App的url
from django.urls import path
from . import views
app_name = 'polls'
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
path('<int:pk>/', views.DetailView.as_view(), name='detail'),
path('<int:pk>/results/', views.ResultsView.as_view(), name='results'),
path('<int:question_id>/vote/', views.vote, name='vote'),
]
3、path转换器
str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含0。
slug,匹配字母、数字以及横杠、下划线组成的字符串。
uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字符串,包含了路径分隔符
Templates--模板--标签
一、form表单csrf_token
{% csrf_token %}
<form action="/your-name/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" />
</form>
二、404.html
在Templates下创建一个404.html,自定义404页面
Session COOKIES 相关
#设置session的存储位置在cookie中
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
SESSION_EXPIRE_AT_BROWSER_CLOSE = True # 是否关闭浏览器使得Session过期
#只允许http请求访问数据
SESSION_COOKIE_HTTPONLY = True
Djano发送邮箱
https://www.cnblogs.com/hainan-zhang/p/6647980.html 发送图片附件
https://blog.csdn.net/ding_312/article/details/82382985 Djano发邮件验证码
https://blog.csdn.net/qq_38059635/article/details/82468809
# 设置邮件域名
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# 设置邮件域名(这里用的是阿里云的邮箱)
EMAIL_HOST = 'smtpdm.aliyun.com'
# 设置端口号 (数字默认为25),在部署到服务器上的时候,很多云服务器屏蔽了端口25
EMAIL_PORT = 465
# 邮箱以及授权码,如果是公司用的邮箱,则密码即可,看情况
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD='1xxxxx'
# 是否启用安全连接SSL,TLS互斥,只能有一个True,而且要和端口号相匹配
EMAIL_USER_TLS= False
EMAIL_USE_SSL = True
#默认邮件
DEFAULT_FROM_EMAIL = 'xxxxxxx <[email protected]>'
from django.core.mail import send_mail,send_mass_mail
#发送一封邮件
send_mail('Subject here', 'Here is the message.', '[email protected]',
['[email protected]'], fail_silently=False)
#发送多封邮件
message1 = ('Subject here', 'Here is the message', '[email protected]', ['[email protected]', '[email protected]'])
message2 = ('Another Subject', 'Here is another message', '[email protected]', ['[email protected]'])
send_mass_mail((message1, message2), fail_silently=False)
datatuple = (
('Subject', 'Message.', '[email protected]', ['[email protected]']),
('Subject', 'Message.', '[email protected]', ['[email protected]']),
)
send_mass_mail(datatuple)