[py]django常用配置
2017-08-21 16:33
363 查看
图形验证码:
pip install django-simple-captcha
参考: http://django-simple-captcha.readthedocs.io/en/latest/usage.html#installation
新建project
django-admin startproject mysite
mysite ├── manage.py └── mysite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
新建app
python manage.py startapp learn
修改setting–添加app
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'learn', )
urls包含设置
mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.py learn/ urls.py ...
mysite/urls.py urlpatterns = [ url(r'^admin/', admin.site.urls), # 别忘记在顶部引入 include 函数 url(r'^learn/', include('learn.urls')), ]
注意:
url(r'^/learn/', include('learn.urls')), #不能这样写(learn前加/),否则报错
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'), ]
TemplateView函数可以将html直接渲染到前端
url(r'^$', TemplateView.as_view(template_name="index.html"), name="index"),
add2.html ... <a href='{% url "learn:add2" 4 5 %}'>4+5</a>
会渲染成:
<a href='/users/4/5/'>4+5</a>
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">
视图配置例子
def add(request): return render(request, "add2.html") def add2(request, a, b): c = int(a) + int(b) return HttpResponse(str(c))
python3 django 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国际化
LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_TZ = False
替换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
邮箱配置
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"
返回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"), ]
reverse函数解析url name
from django.urls import reverse def get(self, request): logout(request) return HttpResponseRedirect(reverse("index"))
后端基于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})
退出view
class LogoutView(View): def get(self, request): logout(request) return HttpResponseRedirect(reverse("index"))
表单渲染
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>
相关文章推荐
- Django学习——setting.py源码解析与常用配置
- django中URL常用配置方法
- django项目培训站-09-所有应用归为一个目录的配置-pycharm与settings.py中-前情回顾
- Django settings.py配置文件
- Django 配置settings.py
- 转:Django 安全配置(setting.py)详解
- Django 使用MySQL数据库时 setting.py配置
- Django(settings.py配置)
- [py][mx]django xadmin后台配置
- Linux 配置 深度学习环境常用的命令 pytorch-tensorflow-cuda-cudnn-nvcc
- django URL常用配置方法
- Django urls.py的了解与基本配置
- django1.7的settings.py连接mysql数据库配置
- django应用找不到settings配置文件,但settings.py文件确实存在的问题
- Py第十一问 PyCharm配置SFTP远程调试Django应用
- [urls.py设置技巧]Django urls.py的了解与基本配置
- Django url.py文件配置错误解决办法
- Django-两种安装xadmin的方法及主要配置方法和常用字段类型
- Django的配置文件(settings.py)
- Python的Django框架完成一个完整的论坛(2.urls.py配置、静态文件)