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

初始化第一个app

项目名: mysite

app名 : learn

  1. - 新建project
  2. django-admin startproject mysite
  3. mysite
  4. ├── manage.py
  5. └── mysite
  6. ├── __init__.py
  7. ├── settings.py
  8. ├── urls.py
  9. └── wsgi.py
  10. - 新建app
  11. python manage.py startapp learn
  12. - 注册app(settings.py)
  13. INSTALLED_APPS = (
  14. 'django.contrib.admin',
  15. 'django.contrib.auth',
  16. 'django.contrib.contenttypes',
  17. 'django.contrib.sessions',
  18. 'django.contrib.messages',
  19. 'django.contrib.staticfiles',
  20. 'learn',
  21. )
  22. - 设置国际化
  23. LANGUAGE_CODE = 'zh-hans'
  24. TIME_ZONE = 'Asia/Shanghai'
  25. USE_TZ = False #数据库入库时间,使用本地时间,而非UTC时间
  1. - 添加view
  2. mysite/learn/views.py
  3. from django.http import HttpResponse
  4. def index(request):
  5. return HttpResponse("hello maotai!")
  6. - 修改url
  7. mysite/urls.py
  8. from learn import views
  9. urlpatterns = [
  10. url(r'^$',views.index),
  11. url(r'^admin/', admin.site.urls),
  12. ]
  • 访问展示

urls include设置

  1. - 项目mysite的目录
  2. mysite/
  3. manage.py
  4. mysite/
  5. __init__.py
  6. settings.py
  7. urls.py
  8. wsgi.py
  9. learn/
  10. urls.py
  11. ...
  12. - 项目url设置
  13. mysite/urls.py
  14. # 别忘记在顶部引入 include 函数
  15. urlpatterns = [
  16. url(r'^admin/', admin.site.urls),
  17. url(r'^learn/', include('learn.urls')),
  18. ]
  19. 注意:
  20. url(r'^/learn/', include('learn.urls')), #注: learn钱不能加/,否则报错
  21. - app url设置
  22. learn/urls.py
  23. from django.conf.urls import url
  24. from learn import views
  25. app_name = 'learn' #这里方便html里调用url
  26. urlpatterns = [
  27. url(r'^add/', views.add, name='add'),
  28. url(r'^add/(\d+)\(\d+)', views.add2, name='add2'),
  29. ]

视图配置例子

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

新增templates模板文件路径设置

  1. mysite/
  2. manage.py
  3. mysite/
  4. __init__.py
  5. settings.py
  6. urls.py
  7. wsgi.py
  8. templates/
  9. learn/
  10. add2.html
  1. mysite/settings.py
  2. TEMPLATES = [
  3. {
  4. ...
  5. 'DIRS': [os.path.join(BASE_DIR, 'templates')],
  6. ...
  7. },
  8. ]

静态文件路径配置

根目录下static文件夹下

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

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

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

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

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

模板url渲染

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

reverse函数解析url name

  1. from django.urls import reverse
  2. def get(self, request):
  3. logout(request)
  4. return HttpResponseRedirect(reverse("index"))

使用自定义的user表

  1. AUTH_USER_MODEL = "users.UserProfile"

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

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

url直接返回view

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

表单渲染

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

后端基于class来写

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

  1. from django.views.generic.base import View
  2. from django.contrib.auth import authenticate, login, logout
  3. class LoginView(View):
  4. def get(self, request):
  5. return render(request, "login.html")
  6. def post(self, request):
  7. login_form = LoginForm(request.POST)
  8. if login_form.is_valid():
  9. user_name = request.POST.get("username", "")
  10. pass_word = request.POST.get("password", "")
  11. user = authenticate(username=user_name, password=pass_word)
  12. print(user)
  13. if user is not None:
  14. if user.is_active:
  15. login(request, user)
  16. return render(request, "index.html")
  17. else:
  18. return render(request, "login.html", {"msg": "用户未激活"})
  19. else:
  20. return render(request, "login.html", {"msg": "用户不存在"})
  21. else:
  22. return render(request, "login.html", {"msg": "用户不存在", "login_form": login_form})

邮箱配置

  1. EMAIL_HOST = "smtp.sina.com"
  2. EMAIL_PORT = 25
  3. EMAIL_HOST_USER = "lanny@sina.com"
  4. EMAIL_HOST_PASSWORD = "123456"
  5. EMAIL_USE_TLS = False
  6. EMAIL_FROM = "lanny@sina.com"

logout退出view

  1. class LogoutView(View):
  2. def get(self, request):
  3. logout(request)
  4. return HttpResponseRedirect(reverse("index"))

图形验证码:

  1. pip install django-simple-captcha

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

django国际化

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

py3 mysql-python驱动安装

  1. - 安装
  2. pip install pymysql
  3. - 在站点的__init__.py文件中添加
  4. import pymysql
  5. pymysql.install_as_MySQLdb()
  6. - 修改settings
  7. DATABASES = {
  8. 'default': {
  9. 'ENGINE': 'django.db.backends.mysql',
  10. "HOST": '127.0.0.1',
  11. 'PORT': 3306,
  12. 'USER':'root',
  13. 'PASSWORD': '',
  14. 'NAME': 'bbs',
  15. }
  16. }
  17. makemigrations
  18. migrate
  19. - 然后navicat看看表存在没.

导入django项目

使用settings里的变量

  1. from django.conf import settings

django mysql配置

  1. DATABASES = {
  2. 'default': {
  3. 'ENGINE': 'django.db.backends.mysql',
  4. 'NAME': APP_CODE,
  5. 'USER': 'root',
  6. 'PASSWORD': 'root',
  7. 'HOST': 'localhost',
  8. 'PORT': '3306',
  9. 'CONN_MAX_AGE': 60,
  10. },
  11. }

media_root设置

  1. settings.py
  2. MEDIA_URL = '/media/'
  3. MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  1. from django.views.static import serve
  2. # 课程机构
  3. path('org_list/', org_views.OrgView.as_view(), name="org_list"),
  4. ## 配置上传文件的访问处理函数 这里使用django内置的serve来返回MEDIA_ROOT
  5. 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. C#设计模式--观察者模式(发布-订阅模式)

    0.C#设计模式--简单工厂模式 1.C#设计模式--工厂方法模式 2.C#设计模式--抽象工厂模式 3.C#设计模式--单例模式 4.C#设计模式--建造者模式 5.C#设计模式--原型模式 6.C ...

  2. 排查java进程cpu占用高的问题

    一.思路 分两步,主要是找出占用cpu高的进程,再找出该进程内到底是哪个线程占用cpu高. 二.找出占用cpu高的进程 参考: https://blog.csdn.net/hfhwfw/article ...

  3. C# HTTPServer和OrleansClient结合

    using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; using ...

  4. TensorFlow MNIST 问题解决

    TensorFlow MNIST 问题解决 一.数据集下载错误 错误:IOError: [Errno socket error] [Errno 101] Network is unreachable ...

  5. File not found 错误 nginx

    这个错误很常见,很明显找不到文件. 原因是php-fpm找不到SCRIPT_FILENAME里执行的php文件,所以返回给nginx 404 错误. 那么两种情况要么文件真的不存在,要么就是路径错误. ...

  6. 免费的SSL证书(LINUX)

    贫穷限制了我的SSL. 说起来也简单,免费的SSL证书授权机构,我使用的是Certbot 选择服务器开启的服务,像我php之流,无非apache和nginx,然后选择使用的服务器类型.嗯,补充一句,这 ...

  7. Entity Framework Core的贴心:优雅处理带默认值的数据库字段

    对于用于保存记录添加时间的数据库日期字段,我们通常会设置一个 GETDATE() 的默认值,而不是在应用程序的代码中获取当前时间进行保存,这样可以避免由于web服务器时钟不同步引起的时间偏差. Ent ...

  8. 删除一个cjson导致系统死机

    一个未使用,未分配的cjson指针应该被删除,如果尝试删除一个 未分配,未启用的cjson将导致内存出错,死机.

  9. [No0000139]轻量级文本编辑器,Notepad最佳替代品:Notepad++

    在详细介绍Notepad++之前,先来解释一下,为何要选择Notepad++,即把常见的一些文本编辑器和Notepad++比较,看看其有哪点好: 常见的文本编辑器有很多,此处,只提及Notepad,N ...

  10. jQuery 报错,对象不支持tolowercase属性或方法

    泪流满面.<input>里id和name都不能是nodeName,否则跟jquery.js冲突 JQuery 实践问题 - toLowerCase 错误 在应用JQuery+easyui开 ...