1、环境搭建
2、新建项目
1)、首先通过 django-admin 新建一个项目,(例如项目名为mxonline)
django-admin startproject mxonline
运行后会出现一个 mxonline的文件夹,这就是整个项目的文件夹,文件夹下的文件结构为:
2)、进入到 mxonline下的settings.py 文件配置数据库,我自己是这样配置的
DATABASES ={'default': {'ENGINE': 'django.db.backends.mysql','NAME': "mxonline",'USER':'root','PASSWORD':'147896321','HOST':'localhost','PORT':'3306',
}
}
然后通过 migrate命令在数据库中会生成初始的数据表
python manage.py makemigrations
python manage.py migrate
注意:如果makemigrations出错,一般都是数据库配置错误,请仔细检查
3、第一个django页面
运行django
python manage.py runserver
然后在浏览器打开 http://127.0.0.1:8000/,就可以看到我么第一个django页面了
4、app的model设计
1)新建一个叫users的app,新建完成后,会出现一个和mxonline同级的users文件夹,这就是我们的users 的app
python manage.py startapp users
2)设计user的model(users/model.py)
# -*- coding: utf-8 -*-from django.db import modelsfrom django.contrib.auth.models importAbstractUserfrom django.utils.encoding importpython_2_unicode_compatible
python_2_unicode_compatibleclassUserProfile(AbstractUser):
nickname= models.CharField(max_length=16, verbose_name=u'昵称', default="")
birday= models.DateField(verbose_name=u'生日', null=True, blank=True)
gender= models.CharField(choices=((‘male’,u'男'),('female',u'女')), default="female")
address= models.CharField(max_length=64, default="")
mobile= models.CharField(max_length=11, null=True, blank=True)
image= mdoels.ImageField(upload_to="image/%Y/%m", default = u'image/default.png', max_length=64)class =Meta:
verbose_name= "用户信息"verbose_name_plural=verbose_namedef __str__(self):return self.username
#other models
...
3)注册 app,并设置 AUTH_USER_MODEL
在settings.py中的 INSTALLED_APP中添加 users
INSTALLED_APPS =['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','users',
]
AUTH_USER_MODEL = "users.UserProfile"
4)因为models中用到了 ImageField,需要安装pillow
进入虚拟环境,安装pillow
pip install pillow
5)同步user表到数据库
python manage.py makemigrations
python manage.py migrate
5、如何将多个app放到一个文件夹apps(apps所在位置为项目根目录)下:
在settings.py文件中,insert apps路径即可
首先
import sys
然后在 BASE_DIR 后面添加apps
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
6、创建后台admin的用户
python manage.py createsuperuser admin
7、settings.py相关设置
LANGUAGE_CODE = 'zh-hans' #修改django后台为中文
TIME_ZONE= 'Asia/Shanghai' #修改时区
USE_TZ= False #本地时间,True为国际时间
8、xadmin(django最好使用1.9.8的版本,pip install django=1.9.8,当然自动安装很简单)
1)settings.py修改
pip install xadmin
修改settings.py中的配置
将 xadmin 和 crispy_forms(注意这里的-改为_) 加入到INSTALLED_APPS中
2)项目urls.py的修改
#from django.contrib import admin
importxadmin
urlpatterns=[#url(r'^admin/', admin.site.urls),
url(r'^xadmin/', xadmin.site.urls),
]
9、手动安装 xadmin
1)、下载xadmin源码,xadmin的源码是保存在github上的,在github首页进行搜索,然后下载到本地
2)、新建extra_apps(第三方app)文件夹(与apps文件夹同级),并在该文件夹下新建__init__.py文件(标识为一个可被调用的包)
然后打开xadmin的源码,将里面的xadmin目录复制到extra_apps文件夹下
3)、最后在settings.py文件中将extra_apps添加到项目路径
sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))
注意:本人在手动安装后运行项目时,出现了下面的错误
from future.utils importiteritems
ImportError: No module named future.utils
通过网上查询,在github上下载了future相关代码
然后复制到项目对应虚拟环境的目录下
我自己对应的目录为:C:\Users\Administrator\Envs\mxonline\Lib\site-packages\
再次运行项目,又出现ImportError: No module named six 的错误,然后可以通过pip install six的方式解决
最后, 同步xadmin相关数据表到数据库
python manage.py makemigrations
python manage.py migrate
项目终于成功启动!!!
10、django邮箱验证登录的实现方式
views.py文件中,在登录函数上面重写CustomBackend类:
from django.contrib.auth.backends importModelBackendfrom django.db.models importQfrom .models importUserProfileclassCustomBackend(ModelBackend):def authenticate(self, username=None, password=None, **kwargs):try:
user= UserProfile.objects.get(Q(username=username)|Q(email=username))ifuser.check_password(password):returnuserexceptException as e:return None
然后在settings.py中添加:
AUTHENTICATION_BACKENDS =('users.views.CustomBackend',
)
11、Django验证码 django-simple-captcha 的使用
1)、安装和配置
通过pip install 快捷安装
pip install django-simple-captcha
将captcha添加到settings.py文件中的 INSTALLED_APPS中
同步响应的配置到数据库中(同步后数据库会新建一个名为captcha_captchastore的数据表)
python manage.py migrate
最后在项目的urls.py文件中添加:
urlpatterns += patterns('',
url(r'^captcha/', include('captcha.urls')),
)
2)、添加到表单并在视图函数或试图类验证
添加到表单
classRegisterForm(forms.Form):
password= forms.CharField(required=True, min_length=6)
email=forms.EmailField()
captcha= captcha = CaptchaField(error_messages={"invalid":u"验证码错误"})
模板中添加以显示出验证码
验 证 码{{ register_form.captcha }}