项目过程中笔记

1. 在HTML页面中,最好使用{% load static %}动态生成静态文件路径,

Django帮我们别名和后面的路径拼接成完整的路径,这样就不用担心静态文件的别名被更改了.
<link rel="stylesheet" type="text/css" href="{% static 'css/reset.css' %}">
图片也是静态文件<img src="{% static 'images/logo02.png' %}">

2. (反向解析name=)

因为我们建立了多个app,然后新建了一个apps,将各app都放到apps下面,我们需要用到二级路由,在各app的urls里面,

我们也需要先导入

from user import views

然后给各url起个别名,利用反向解析,找到url的正则地址,然后通过正则地址,执行相应的函数,这样和动态生成静态文件路径一样,不担心正则匹配的url地址,被改动了
url(r'^register$',views.register,name='register'),

 

3.Views视图,我个人更倾向于CBV,CBV需要导入View

from django.views import View,然后类继承于View.

class Register(View):比如注册视图

4.返回HTML时,不需要加路径

因为在settings.py里面已经配置好了TEMPLEATS的路径,DIRS': [os.path.join(BASE_DIR, 'templates')],

所以return render(request, 'register.html')时候,'html不需要加路径'
def get(self, request):
        return render(request, 'register.html')

5.urls.py里面导入views

因为settings.py里面已经加入了apps的搜索路径
import sys
sys.path.insert(0,os.path.join(BASE_DIR,'apps'))
所以本来应该写成from apps.user import views,但是也可以就写成from user import views

from user import views
urlpatterns = [
    # 因为我使用的是CBV
    # url(r'^register$',views.register,name='register'),
    url(r'^register$',views.Register.as_view(),name='register'),
]

6.问题:

RuntimeError: Model class apps.users.models.UserProfile doesn't declare an explicit app_label and either isn't in 
an application in INSTALLED_APPS or else was imported before its application was loaded.
  1. 确认是否在settings.py里面添加了apps路径:
    sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
  2. 确实是否在settings.py里面的 INSTALLED_APPS 里进行了注册

    apps.你的app名称就可以了。而不是'apps.order.apps.OrderConfig', # 订单模块

7.业务逻辑流程(比如注册业务处理)

  1. 接受数据
  2. 进行数据校验
  3. 进行业务处理
  4. 进行应答
 1 class RegisterHandle(View):
 2     '''注册注册逻辑处理'''
 3     # 接受数据
 4     # 进行数据校验
 5     # 进行业务处理
 6     # 进行应答
 7 
 8     def get(self, request):
 9 
10         pass
11 
12     def post(self, request):
13         '''业务处理流程'''
14         # 接受数据
15         username = request.POST.get('user_name')
16         password = request.POST.get('pwd')
17         re_password = request.POST.get('re_pwd')
18         email = request.POST.get('email')
19         allow = request.POST.get('allow') # 是否同意协议
20         print('allow:',allow)
21 
22         # 进行数据校验
23         # 这儿引出一个all()方法,参数为可迭代对象,也就是列表,元组等,all():如果所有可迭代对象都为True,那么返回True,否则返回False
24         if not all([username, password, re_password, email]):
25             # 如果数据不完整,返回提示
26             return render(request, 'register.html', {'error_msg_all': '数据不完整!'})
27 
28         # 进行邮箱校验
29         if not re.match(r'^[a-z0-9][\w.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email):
30             return render(request, 'register.html', {'error_msg_email':'邮箱格式不正确!'})
31         # 校验两次输入的密码是否一致
32         if password != re_password:
33             return render(request, 'register.html', {'error_msg_same':'两次输入密码不一致!'})
34 
35         # 校验是否同意协议
36         # 如果单选框被选中,返回on,如果没有被选中,返回None.
37         if not allow:
38             return render(request, 'register.html',{'error_msg_agree':'请同意协议!'})
39 
40         # 校验用户名是否重复
41         try:
42             user = models.User.objects.get(username=username)
43         except models.User.DoesNotExist:
44             # 抛出异常说明,数据库中没有此用户,那么同意注册该用户
45             user = None
46         if user:
47             # 如果用户名存在,则不同意注册,返回提示
48             return render(request, 'register.html', {'error_msg_user': '用户名已被注册!'})
49         # 如果用户名没有被注册,那么进行用户注册:
50         # 这儿注册要用create_user(...),这样密码会以密文形式保存,
51         # 注册方法一:(推荐)
52         # from django.contrib.auth.models import User
53         # User.objects.create_user(username, email, password)
54         # 注册方法二:
55         # from apps.user import models
56         # user = models.User.objects.create_user(username=username, email=email, password=password)
57         # 注册方法三:(密码非加密)
58         # from apps.user import models
59         # user = models.User.objects.create(username=username, email=email, password=password)
60 
61         # 这三种注册方式,都会将is_active = 1:也就是激活状态,但是我们一开始不要将它设为激活状态,因为后期需要邮箱激活
62         user = models.User.objects.create_user(username=username, email=email, password=password)
63         user.is_active = 0
64         user.save()
65         # 手动修改一条数据后,需要save()
66 
67         # 这儿用到了命名空间,和name的反向解析
68         # 实际跳转http://127.0.0.1:8002/index/
69         return redirect(reverse('goods:index'))
70 
71         # return redirect('/index/?type=哈哈/')
View Code

8.用户注册,使用Django提供的注册方式

 1 # 校验用户名是否重复
 2         try:
 3             user = models.User.objects.get(username=username)
 4         except models.User.DoesNotExist:
 5             # 抛出异常说明,数据库中没有此用户,那么同意注册该用户
 6             user = None
 7         if user:
 8             # 如果用户名存在,则不同意注册,返回提示
 9             return render(request, 'register.html', {'error_msg_user': '用户名已被注册!'})
10         # 如果用户名没有被注册,那么进行用户注册:
11         # 这儿注册要用create_user(...),这样密码会以密文形式保存,
12         # 注册方法一:(推荐)
13         # from django.contrib.auth.models import User
14         # User.objects.create_user(username, email, password)
15         # 注册方法二:
16         # from apps.user import models
17         # user = models.User.objects.create_user(username=username, email=email, password=password)
18         # 注册方法三:(密码非加密)
19         # from apps.user import models
20         # user = models.User.objects.create(username=username, email=email, password=password)
21 
22         # 这三种注册方式,都会将is_active = 1:也就是激活状态,但是我们一开始不要将它设为激活状态,因为后期需要邮箱激活
23         user = models.User.objects.create_user(username=username, email=email, password=password)
24         user.is_active = 0
25         user.save()
26         # 手动修改一条数据后,需要save()
View Code

9.request请求路径方式:

def index(request):
    # 地址栏 127.0.0.1:8000/user/?index=哈哈
    print("1",request.get_host()) # 127.0.0.1:8002
    print("2",request.get_raw_uri()) # 完整的路径,包括网址、路径、参数
    print('3',request.path_info) # 路径,不包含参数: /user/
    print('4',request.get_full_path()) # 路径加参数: /user/?index=%fsafa%/
    # 如果想让其正常显示(有中文的情况下), 需进行如下编码处理【django默认编码是unicode的】
    # request.get_full_path().encode('utf-8')
    # request.path.encode('utf-8')
    return render(request, 'index.html')

10.form表单中action=‘...’

如果form表单中action不写,默认往当前路径提交

 

  



posted @ 2019-05-07 15:29  何去何从gw  阅读(131)  评论(0编辑  收藏  举报