关于django版本说明:

Django 1.11.x 支持 Python 2.7, 3.4, 3.5 和 3.6(长期支持版本 LTS) 最后一个支持 Python 2.7 的版本

Django 2.0.x 支持 Python 3.4, 3.5 和 3.6 (注意,不再支持 Python 2)

1.创建项目
2.创建app
3.初始化settings
4.配置urls
5.配置templates<appname
6.返回字符串
7,返回index.html
8,创建模型
9,将模型里数据返回index.html

初始化第一个app

项目名: mysite

app名 : learn

- 新建project
django-admin startproject mysite mysite
├── manage.py
└── mysite
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py - 新建app
python manage.py startapp learn - 注册app(settings.py)
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles', 'learn',
) - 设置国际化 LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai' USE_TZ = False #数据库入库时间,使用本地时间,而非UTC时间
- 添加view
mysite/learn/views.py from django.http import HttpResponse
def index(request):
return HttpResponse("hello maotai!") - 修改url
mysite/urls.py from learn import views
urlpatterns = [
url(r'^$',views.index),
url(r'^admin/', admin.site.urls),
]
  • 访问展示

urls include设置

- 项目mysite的目录
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
learn/
urls.py
... - 项目url设置
mysite/urls.py # 别忘记在顶部引入 include 函数
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^learn/', include('learn.urls')),
] 注意:
url(r'^/learn/', include('learn.urls')), #注: learn钱不能加/,否则报错 - app url设置
learn/urls.py from django.conf.urls import url
from learn import views app_name = 'learn' #这里方便html里调用url
urlpatterns = [
url(r'^add/', views.add, name='add'),
url(r'^add/(\d+)\(\d+)', views.add2, name='add2'),
]

视图配置例子

def add(request):
return render(request, "add2.html") def add2(request, a, b):
c = int(a) + int(b)
return HttpResponse(str(c))

新增templates模板文件路径设置

mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
templates/
learn/
add2.html
mysite/settings.py

TEMPLATES = [
{
...
'DIRS': [os.path.join(BASE_DIR, 'templates')],
...
},
]

静态文件路径配置

根目录下static文件夹下

STATIC_URL = '/static/'  #前端页面写这个路径即可.
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static'),
]

STATIC_URL被映射到STATICFILES_DIRS指定的目录.

STATIC_URL = '/statics/'
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static'),
] 前端写的时候写
<link rel="stylesheet" type="text/css" href="/statics/css/style.css">

TemplateView函数可以将html直接渲染到前端

url(r'^$', TemplateView.as_view(template_name="index.html"), name="index"),

模板url渲染

add2.html
...
<a href='{% url "learn:add2" 4 5 %}'>4+5</a> 会被渲染成:
<a href='/users/4/5/'>4+5</a>

reverse函数解析url name

from django.urls import reverse

def get(self, request):
logout(request)
return HttpResponseRedirect(reverse("index"))

使用自定义的user表

AUTH_USER_MODEL = "users.UserProfile"

替换authenticate方法实现邮箱and用户名同时可登录

AUTHENTICATION_BACKENDS = (
'users.views.CustomBackend',
)
from django.db.models import Q
from django.contrib.auth.backends import ModelBackend class CustomBackend(ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
try:
user = UserProfile.objects.get(Q(username=username) | Q(email=username))
if user.check_password(password):
return user
except Exception as e:
return None

url直接返回view

from django.views.generic import TemplateView

urlpatterns = [
url(r'^$', TemplateView.as_view(template_name="index.html"), name="index"), # 通过url直接返回html
url(r'^login/', views.LoginView.as_view(), name="login"), # 通过后端来渲染的view
url(r'^active/(?P<active_code>.*)/$',views.ActiveUserView.as_view(),name="user_active"),
]

表单渲染

from django import forms
from captcha.fields import CaptchaField class LoginForm(forms.Form):
username = forms.CharField(required=True)
password = forms.CharField(required=True, min_length=5) class RegisterForm(forms.Form):
email = forms.EmailField(required=True)
password = forms.CharField(required=True, min_length=5)
captcha = CaptchaField(error_messages={"invalid": "验证码错误"})
class RegisterView(View):
def get(self, request):
register_form = RegisterForm() # 这里
... def post(self, request):
register_form = RegisterForm(request.POST) #这里
...
return render(request, 'register.html', {"register_form": register_form, "msg": ""})
前端:
- 1.name和后端forms一致
<p>邮箱: <input type="text" name="email">{{ register_form.errors.email }}</p> - 2.后端forms直接实例化后,调用某个字段在前端显示
<p>{{ register_form.captcha }}{{ register_form.errors.captcha }}</p>

后端基于class来写

省去了if request.method == "POST"等重复性代码

from django.views.generic.base import View
from django.contrib.auth import authenticate, login, logout class LoginView(View):
def get(self, request):
return render(request, "login.html") def post(self, request):
login_form = LoginForm(request.POST)
if login_form.is_valid():
user_name = request.POST.get("username", "")
pass_word = request.POST.get("password", "")
user = authenticate(username=user_name, password=pass_word)
print(user)
if user is not None:
if user.is_active:
login(request, user)
return render(request, "index.html")
else:
return render(request, "login.html", {"msg": "用户未激活"})
else:
return render(request, "login.html", {"msg": "用户不存在"})
else:
return render(request, "login.html", {"msg": "用户不存在", "login_form": login_form})

邮箱配置

EMAIL_HOST = "smtp.sina.com"
EMAIL_PORT = 25
EMAIL_HOST_USER = "lanny@sina.com"
EMAIL_HOST_PASSWORD = "123456"
EMAIL_USE_TLS = False
EMAIL_FROM = "lanny@sina.com"

logout退出view

class LogoutView(View):
def get(self, request):
logout(request)
return HttpResponseRedirect(reverse("index"))

图形验证码:

pip install  django-simple-captcha

参考: http://django-simple-captcha.readthedocs.io/en/latest/usage.html#installation

django国际化

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai' USE_TZ = False #数据库入库时间,使用本地时间,而非UTC时间

py3 mysql-python驱动安装

- 安装
pip install pymysql - 在站点的__init__.py文件中添加
import pymysql
pymysql.install_as_MySQLdb() - 修改settings
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
"HOST": '127.0.0.1',
'PORT': 3306,
'USER':'root',
'PASSWORD': '',
'NAME': 'bbs',
}
} makemigrations
migrate - 然后navicat看看表存在没.

导入django项目

使用settings里的变量

from django.conf import settings

django mysql配置

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': APP_CODE,
'USER': 'root',
'PASSWORD': 'root',
'HOST': 'localhost',
'PORT': '3306',
'CONN_MAX_AGE': 60,
},
}

media_root设置

settings.py

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
from django.views.static import serve

# 课程机构
path('org_list/', org_views.OrgView.as_view(), name="org_list"),
## 配置上传文件的访问处理函数 这里使用django内置的serve来返回MEDIA_ROOT
url(r'^media/(?P<path>.*)', serve, {'document_root':MEDIA_ROOT}),

[dj]django常用设置的更多相关文章

  1. pycharm快捷键、常用设置、配置管理

    http://blog.csdn.net/pipisorry/article/details/39909057 pycharm学习技巧 Learning tips /pythoncharm/help/ ...

  2. (转)pycharm快捷键、常用设置、配置管理

    原文: http://blog.csdn.net/pipisorry/article/details/39909057 本博客一直在同步更新中! 内容包含:pycharm学习技巧 Learning t ...

  3. pycharm常用设置和快捷键大全

    pycharm常用快捷键 1.编辑(Editing) Ctrl + Space    基本的代码完成(类.方法.属性)Ctrl + Alt + Space  快速导入任意类Ctrl + Shift + ...

  4. django 常用 详解

    Django 1 django框架介绍 是一个开源框架,2005年发布,采用Python语言编写的,早期时主要做新闻和内容管理的网站 Django本身提供了非常强大的后台管理系统 看中文说明文档 百度 ...

  5. PLSQL Developer常用设置及快捷键

    CSDN日报20170314--<40岁程序员真的要被淘汰了么?> 程序员2月书讯 [直播]用面向协议的思想简化网络请求 博客一键搬家活动开始啦 PLSQL Developer常用设置及快 ...

  6. 30款Django 常用的软件包

    30款Django 常用的软件包 Django是一款高级的Python Web框架,可以帮助开发者快速创建web应用.我们这里整理了30款Django开发中常用的软件包,学会使用它们可以节省大量开发时 ...

  7. pycharm快捷键及一些常用设置

    pycharm快捷键及一些常用设置,有需要的朋友可以参考下. Alt+Enter 自动添加包 Ctrl+t SVN更新 Ctrl+k SVN提交 Ctrl + / 注释(取消注释)选择的行 Ctrl+ ...

  8. PLSQLDeveloper 常用设置

    PLSQL Developer常用设置及快捷键   1.登录后默认自动选中My Objects (已验证可用)   默认情况下,PLSQL Developer登录后,Brower里会选择All obj ...

  9. 百度编辑器UEditor常用设置函数大全

    在线文档对UEditor说明不够全面,收集了一些常用的方法和基本设置,以供参考.1.创建编辑器UE.getEditor('editor', { initialFrameWidth:"100% ...

随机推荐

  1. MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

    新建web project: 命名为SSH,做如下设置: 新建后的工程目录如下: 然后开始添加SSH框架,这里我按照struts-spring-hibernate顺序进行添加. 首先添加struts2 ...

  2. 【本周主题】第三期 - JavaScript 内存机制

  3. Go语言学习笔记1

    1.Go语言环境搭建及基础知识 Go语言官方网站(http://golang.org) 代码包文档网站(http://godoc.org) Go语言中文网(http://studygolang.com ...

  4. NHibernate.3.0.Cookbook第一章第五节Setting up a base entity class

    Setting up a base entity class设置一个实体类的基类 在这节中,我将给你展示怎么样去为我们的实体类设置一个通用的基类. 准备工作 完成前面三节的任务 如何去做 1.在Ent ...

  5. YSQL获取自增ID的四种方法(转发)

    YSQL获取自增ID的四种方法(转发) 1. select max(id) from tablename 2.SELECT LAST_INSERT_ID() 函数 LAST_INSERT_ID 是与t ...

  6. MySQL 之【视图】【触发器】【存储过程】【函数】【事物】【数据库锁】【数据库备份】

    1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视图有如下特点;  1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系.  2. 视 ...

  7. sometimes we should use "disable fork" instead of "disable block_name"

    A disable named block statement stops the execution of all blocks with that same name in all threads ...

  8. Ubuntu设置DNS永久生效

    环境查看 设置临时生效,修改配置文件/etc/resolv.conf nameserver 202.96.134.133 重启失效 设置永久生效,修改网卡配置文件/etc/network/interf ...

  9. Codeforces 835C - Star sky - [二维前缀和]

    题目链接:http://codeforces.com/problemset/problem/835/C 题意: 在天空上划定一个直角坐标系,有 $n$ 颗星星,每颗星星都有坐标 $(x_i,y_i)$ ...

  10. 【单调栈】hdu 6319 杭电多校Problem A. Ascending Rating

    http://acm.hdu.edu.cn/showproblem.php?pid=6319 从后往前更新,维护一个递减单调栈(队列) 最近很多题都是单调栈... #define _CRT_SECUR ...