Django1.11 简单登录注册

百度的教程都是坑,还是要靠自己,,,
代码地址:https://github.com/klren0312/Django_login_register

1. 安装django 1.11

pip install django

2.安装pymysql

我是Python3.5,所以必须用pymysql

pip install pymysql

3.用PyCharm新建项目

项目名为finally,用python manage.py startapp mysite新建名为mysite的app。
python manage.py createsuperuser创建后台用户。
具体目录结构

Django1.11 简单登录注册_第1张图片
目录.jpg

记得要在setting.py中配置app

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'mysite',
]

4.配置数据库为mysql

注意设置语言和时区,我时区没设置,发现最后自动填充到数据库的时间不是中国时间

文件路径 finally/settings.py

TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False

配置MySQL数据库

文件路径 finally/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':  'django',//数据库名
        'USER':'root',//mysql用户名
        'PASSWORD':'root',//mysql密码
        'HOST':'127.0.0.1',
        'PORT':'3306'
    }
}

还要引入包

文件路径 finally/__init__.py

import pymysql
pymysql.install_as_MySQLdb()

5.数据表生成

Django 1.7以上 要用两句话来同步数据库

python manage.py makemigrations
python manage.py migrate
文件路径:mysite/models.py

from django.db import models

class User(models.Model):
    username = models.CharField(max_length=50)
    password = models.CharField(max_length=50)
    email = models.EmailField()

6.视图配置

  • 就是一些登录注册的路由,此处我关了csrf(具体可以在下面的相关问题解决处查看)
  • 很无奈,很多教程还在用render_to_response,但是我查了资料。render()方法是render_to_response的一个崭新的快捷方式,前者会自动使用RequestContext。而后者必须coding出来,这是最明显的区别,当然前者更简洁。
文件路径:mysite/views.py

from django.shortcuts import render
from django.http import HttpResponse
from mysite.models import User
from django.views.decorators.csrf import csrf_exempt
 
   #注册
@csrf_exempt
def regist(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        email = request.POST['email']
        #此处遇坑
        k = User.objects.create(username=username,password=password,email=email)
        k.save()
        return HttpResponse('regist success!!!')
    else:
        return render(request, 'regist.html')
    return render(request, 'regist.html')

 #登录
@csrf_exempt
def login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = User.objects.filter(username__exact=username,password__exact=password)
        if user:
            return render(request,"index.html")
        else:
            return HttpResponse('用户密码错误,请再次登录')
    else:
        return render(request,"login.html")
    return render(request,"login.html")

 #首页
def index(request):
    return render(request,"index.html")

7.配置urls路径

文件路径:finally/urls.py

from django.conf.urls import url
from django.contrib import admin
from mysite import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^regist/$',views.regist),
    url(r'^index/$',views.index),
    url(r'^login/$',views.login),
]

8.相关页面

没意思的部分

文件路径:templates/index.html




    
    Title

    


    

主界面

文件路径:templates/regist.html


{% load static %}


    
    regist

    


    

注册界面

文件路径:templates/login.html




    
    Title

    


    

登录页面

9.运行结果

Django1.11 简单登录注册_第2张图片
注册页面.jpg
Django1.11 简单登录注册_第3张图片
注册成功.jpg
Django1.11 简单登录注册_第4张图片
数据库.jpg

10.遇到的问题

  • 报错save() missing 1 required positional argument: 'self'

原代码

        User.objects.create(username=username,password=password,email=email)
        User.save()

改后代码

        k = User.objects.create(username=username,password=password,email=email)
        k.save()
  • 2[CSRF token missing or incorrect]

我很无奈,直接禁用。
在views.py中引入包

from django.views.decorators.csrf import csrf_exempt

在函数上面加@csrf_exempt

@治电小白菜20170518

你可能感兴趣的:(Django1.11 简单登录注册)