Django1.9.8 + Xadmin + Windows 快速搭建网站

1.创建python虚拟环境
  pip install virtualenvwrapper-win
  mkvirtualenv env3.4
  workon env3.4
  deactivate

  pip install virtualenv
  virtualenv -p c:\Python27\python.exe env2.7
  cd env2.7\Scripts\activate
  deactivate

2.安装django
  pip install django==1.9.8

3.安装mysql python 驱动
  http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python

4.配置setting中的DATABASES
  填写链接数据库的
  用户名
  密码
  host
  数据库名

 1 DATABASES = {
 2     'default': {
 3         #'ENGINE': 'django.db.backends.sqlite3',
 4         'ENGINE': 'django.db.backends.mysql',
 5         #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
 6         'NAME': 'learndjango',
 7         'USER': 'root',
 8         'PASSWORD':'',
 9         'HOST':'127.0.0.1',
10         'OPTIONS'  : { "init_command":"SET foreign_key_checks = 0;", },
11 
12     }
13 
14 }

5.生成django默认的数据表
  pycharm中tools run manager.py task
  makmigrations
  migrate

6. 新建app(一般都是新建user app)
  tools run manager.py task
  1.startapp appName(users)
  接下来编辑 models.py 设计对象属性(对象属性设计过程中不要将名字写成与其他的对象名称重名如果在该对象作为另一个有重名的对象的外键的时候就会出现

  fields.E303: Reverse query name for field <field name> clashes with field <field name>错误 如果出现该错误则可以添加related_name='append_XXX' 属性
  user
    继承原有的AbstractUser 并添加 昵称 生日 性别 地址 手机号码 头像
    对于头像使用到imageFiled属性 依赖python 的pillow包
    pip install pillow
    前面步骤都创建完成后使用
    tools run manager.py task
    1.makemigrations apps
    2.migrate
    点击运行django项目
    会提示是否删除 auth|user 表 选yes

  tools run manager.py task

  

  2.startapp appName(courses)
    在django中表关系使用models.ForeignKey 来建立
    model.py 设计对象属性
    courses(课程表)
      1-n(一对多)课程章节lesson(章节表)
        1-n(一对多)课程小章节(video表)
    lessonRecourse课程资源表

  3.startapp appName(organization)
    model.py 设计对象属性
    courseOrg(机构基本信息表)
    teacher(教师基本信息)
    city(城市信息)

  4.startapp appName(operation)
    model.py 设计对象属性
    userAsk(用户咨询表)
    userCourseComment(用户课程评论表)
    userFav(用户收藏表)
    userMessage(用户提示信息表)
    userCourse(用户学习课程表)

代码示例

 1 class userProfile(AbstractUser):
 2     nickName = models.CharField(max_length= 50, verbose_name=u"昵称", default="")
 3     birthday = models.DateField(verbose_name=u"生日", null= True, blank=True)
 4     gender = models.CharField(choices=(("male",u""),("female",u"")), default="female", max_length= 6, verbose_name=u"性别")
 5     address = models.CharField(max_length= 100, default=u"")
 6     mobile = models.CharField(max_length= 11, null=True, blank=True)
 7     image = models.ImageField(upload_to="image/%Y/%m", default=u"image/default.png", max_length= 100)
 8 
 9     class Meta:
10         verbose_name = u"用户信息"
11         verbose_name_plural = verbose_name
12 
13     def __unicode__(self):
14         return self.username

7. 在setting 中的 INSTALL_APPS 中对创建的app进行注册

8.将model注册到xadmin中 快速搭建后台管理系统
  from .models import 对象(user)
  import xadmin
  “注册”
  class 对象(user)Admin(object):
  list_display = ['属性列表用于在xadmin展示',]
  list_filter = ['属性列表用于在xadmin中进行过滤',]
  search_fields = ['属性列表用于在xadmin中进行搜索',]
  “关联”
  xadmin.site.register(user,userAdmin)

9.进行全局的替换工作logo footer.....
  app 下面的apps用来修改菜单显示内容 verbose_name = u"XXXXX"
  在 init 文件中是配置生效 default_app_config = "XXX.apps.XXXConfig"

10.配置站点可以直接访问的index页面 ip:端口号 就可以直接访问 192.168.0.108::8000 直接到index

1 from django.views.generic import  TemplateView
2 #直接跳转到index页面
3 urlpatterns = [
4     url(r'^$', TemplateView.as_view(template_name="index.html"), name="index"),
5 ]

11.使用静态文件夹在setting中添加代码段

1 STATICFILES_DIRS = [
2   os.path.join(BASE_DIR , 'static')
3   ]

12.禁止访问403错误 CSRF验证失败 django的安全机制 需要在templates 的form 表单里面添加 {% csrf_token%}

  添加csrf_token 之后就会添加一个隐藏的input标签 将生成的csrf验证码添加进去

1 <input type="hidden" name="csrfmiddlewaretoken" value="5I2SlleZJOMUX9QbwYLUIAOshdrdpRcy">
1 <form ......>
2 {% csrf_token%}
3 </form>

13.添加邮箱验证

  1.重写authenticate 方法

 1 from django.contrib.auth.backends import ModelBackend
 2 from django.db.models import Q
 3 #apps/users
 4 #继承ModelBackends 类 将authenticate 方法重写
 5 #Q 支持(Q(username = username)|Q(email= username),XXX)的方式
 6 class customBackend(ModelBackend):
 7     def authenticate(self, username=None, password=None, **kwargs):
 8         try:
 9             user = userProfile.objects.get(Q(username = username)|Q(email= username))
10             if user.check_password(password):
11                 return user
12         except Exception as e:
13             return None

  2.在setting文件中添加这一配置(便可以支持邮箱登录)

AUTHENTICATION_BACKENDS = (
    'users.views.customBackend',
)

  3.在urls.py中url映射进行修改

1 from users.views import loginView
2 url(r'^login/$', loginView.as_view(), name="login"),

14.后台使用django的forms进行字段验证

  1.在user app中添加一个forms.py 添加要验证的字段

1 from django import forms
2 
3 class loginForm(forms.Form):
4     #此处字段名称必须与html中的字段一样才可以进行校验
5     username = forms.CharField(required=True)
6     password = forms.CharField(required=True, min_length=5)

  2.在views.py中使用forms

 1     def post(self, request):
 2         #将表单里面的字段对应到loginForm的字段 去做校验(无论前端有没有校验后端都必须校验)
 3         loginForms = loginForm(request.POST)
 4         if loginForms.is_valid():
 5             userName = request.POST.get("username", "")
 6             password = request.POST.get("password", "")
 7             user = authenticate(username=userName, password=password)
 8             if user is not None:
 9                 login(request, user)
10                 return render(request, 'index.html', {})
11             else:
12                 return render(request, 'login.html', {"msg": "用户名或密码错误!"})
13         else:
14             return render(request, 'login.html', {"loginForms":loginForms})

  3.在templates中回传错误信息

1 #循环遍历并显示loginForms中的所有错误
2 <div class="error btns login-form-tips" id="jsLoginTips">{% for key, error in loginForms.errors.items%}{{ key }}:{{ error }}{% endfor %}{{ msg }}</div>
3 #仅显示用户名或者密码字段错误
4 <div class="form-group marb20 {% for key, error in loginForms.errors.username %}{{ error }}errorput{% endfor %}">
5  <div class="form-group marb8 {% for key, error in loginForms.errors.password %}{{ error }}errorput{% endfor %}">

15.django实现登录的详细过程

  http是一种无状态的协议 为了解决这一件事情添加cookie 是一种浏览器本地保存一种状态保存服务器返回的信息 存在各服务器域名之下 不可以跨域访问

  但是cookie本身不安全 因此服务器端生成一个session存在服务器端一段时间失效

16.验证码 使用captcha github 文档

  1.安装captcha pip install django-simple-captcha==0.4.6

  2.在setting中installed app 添加captcha

  3.urls中添加 url(r'^captcha/', include('captcha.urls')),

  4.pycharm tools run manager.py task migration  最后执行migrate(完成图片验证码的基本配置)

  5.具体使用步骤

    1.在apps中的应用users中的forms.py 添加表单验证

1 from captcha.fields import CaptchaField
2 
3 class registerForm(forms.Form):
4     email = forms.EmailField(required=True)
5     password = forms.CharField(required=True, min_length=5)
6     captcha = CaptchaField()

    2.views中的register类

1 class registerView(View):
2     def get(self, request):
3         registerForms = registerForm()
4         return render(request, 'register.html', {"registerForms":registerForms})

    2.在html页面中使用

1 {{ registerForms.captcha }}

17.注册 激活 修改密码

1.将所有的app放到新建的apps文件夹下面
  需要在setting中添加apps到路径里边 sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))


3.定义AUTH_USER_MODEL = 'users.userProfile' 去覆盖原有的基础user表

4.#USE_TZ = True #True使用UTC时间 False 使用本地时间

5. app 下的admin.py 用来注册后台管理系统
  class userProfileAdmin(admin.ModelAdmin):
  "注册"
  pass
  "关联"
  admin.site.register(userProfile, userProfileAdmin)



  makemigrations app 生成一个比对记录
  #No changes detected in app 'messages' 要在setting 中的apps 进行注册
  migrate 生成数据表


model 设计(ORM):
  url name = 'XDXXX' 在页面上的action={%url 'XDXXX'%}

  django apps设计
  django apps model 设计
  django apps model 数据表生成与修改
  user 用户管理
  course 课程管理
  organization 机构和讲师管理
  operation 用户操作管理(用来解决循环引用的问题)

使用xadmin遇到的一些错误
  No module named future.utils pip install future
  No module named import_export.admin pip install django-import-export
取消外键检查

 1 DATABASES = {
 2     'default': {
 3         #'ENGINE': 'django.db.backends.sqlite3',
 4         'ENGINE': 'django.db.backends.mysql',
 5         #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
 6         'NAME': 'learndjango',
 7         'USER': 'root',
 8         'PASSWORD':'',
 9         'HOST':'127.0.0.1',
10         'OPTIONS'  : { "init_command":"SET foreign_key_checks = 0;", },
11 
12     }
13 
14 }

  pycharm 添加git
  django 使用xadmin pip install xadmin 依赖自己安装好 在installapp 里面注册 修改urls 为xadmin

slice
#使用模板中的slice过滤相对地址中的路径是哪一个然后给标签添加class
{% if request.path|slice:'7' == '/course' %}class = "active"{% endif %}

 Q

from django.db.models import Q
#使用Q对多个条件进行过滤
allCourses = allCourses.filter(Q(name__icontains=keywords)|Q(desc__icontains=keywords))

 default_if_none

#template default_if_none 如果查到的该值为空就显示后面设置的值
{{ request.user.address|default_if_none:'' }}

#sql 注入 通过输入sql语法进行操作

#xss 攻击 盗取账号 资料

#csrf 攻击 跨站请求伪造 

window安装uwsgi 遇到AttributeError: 'module' object has no attribute 'uname'  在uwsgi下载压缩包解压到Python的Python27\Lib\site-packages 找到 uwsgiconfig.py 添加import platform 并且将 os.uname  替换为 platform.uname

 

Django 使用 django-rest-framework 写一个API 接口返回Json文件

  安装 pip install djangorestframework

  安装 pip install django-rest-swagger

   安装pip install django-simple-serializer

  修改settings.py 文件
  添加app
  'rest_framework_swagger',
  'rest_framework',

view.py

from django.shortcuts import render
from rest_framework.views import APIView
from dss.Serializer import serializer
from django.http import HttpResponse, HttpRequest
import json

# Create your views here.
def response_as_json(data, foreign_penetrate=False):
    jsonString = serializer(data=data, output_type="json", foreign=foreign_penetrate)
    response = HttpResponse(
            # json.dumps(dataa, cls=MyEncoder),
            jsonString,
            content_type="application/json",
    )
    response["Access-Control-Allow-Origin"] = "*"
    return response

def return_json(abstract):
    result = dict()
    result['x'] = 'a'
    result['y'] = 'b'
    result['z'] = 'c'
    return result

def json_response(data, code=200, foreign_penetrate=False, **kwargs):
    data = {
        "code": code,
        "msg": "成功",
        "data": data,
    }
    return response_as_json(data, foreign_penetrate=foreign_penetrate)


def json_error(error_string="", code=500, **kwargs):
    data = {
        "code": code,
        "msg": error_string,
        "data": {}
    }
    data.update(kwargs)
    return response_as_json(data)

JsonResponse = json_response
JsonError = json_error
class ReturnJson(APIView):

def get(self, request, *args, **kwargs):
    xx = request.query_params
    abstract = xx['xx']
    abstract = json.dumps(return_json(abstract))    
    return JsonResponse(abstract)

通过localhost:8000/api/genjson?abstract=内容 就可以得到返回的字典文件 使用json的loads加载解析就可以

  

转载于:https://www.cnblogs.com/wlc297984368/p/7701385.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值